Replicated enterprisePortal API
The enterprisePortal API from Replicated — 27 operation(s) for enterpriseportal.
The enterprisePortal API from Replicated — 27 operation(s) for enterpriseportal.
swagger: '2.0'
info:
description: Manage enterprise portal users, install options, branding, documentation, email templates, and access control.
title: Vendor API V3 apps enterprisePortal API
contact:
name: Replicated, Inc.
url: http://www.replicated.com/
email: info@replicated.com
version: 3.0.0
host: api.replicated.com
basePath: /vendor/v3
schemes:
- https
consumes:
- application/json
produces:
- application/json
tags:
- name: enterprisePortal
paths:
/app/{app_id}/enterprise-portal/access:
get:
security:
- api_key: []
description: 'Required RBAC Policy: kots/app/[:appid]/enterprise-portal/access/read'
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Get download portal access settings
operationId: getEnterprisePortalAccess
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
responses:
'200':
$ref: '#/responses/getEnterprisePortalAccessResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
put:
security:
- api_key: []
description: 'Required RBAC Policy: kots/app/{app_id}/enterprise-portal/access/update'
consumes:
- application/json
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Update download portal access settings
operationId: updateEnterprisePortalAccess
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- description: JSON input
name: Body
in: body
required: true
schema:
type: object
properties:
auto_invite_to_ep_on_create:
description: 'Whether to automatically invite the customer email to Enterprise Portal on customer creation.
Requires download_portal_disabled to be true.'
type: boolean
x-go-name: AutoInviteToEpOnCreate
download_portal_disabled:
description: Whether the download portal is disabled. When set to false, auto_invite_to_ep_on_create is automatically disabled.
type: boolean
x-go-name: DownloadPortalDisabled
responses:
'200':
$ref: '#/responses/updateEnterprisePortalAccessResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/branding:
get:
security:
- api_key: []
description: 'Required RBAC Policy: kots/app/[:appid]/enterprise-portal/branding/read'
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Get custom branding for the enterprise portal
operationId: getEnterprisePortalBranding
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
responses:
'200':
$ref: '#/responses/getEnterprisePortalBrandingResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
put:
security:
- api_key: []
description: 'Required RBAC Policy: kots/app/{app_id}/enterprise-portal/branding/update'
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Update custom branding for the enterprise portal
operationId: updateEnterprisePortalBranding
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- description: Update custom branding for the enterprise portal
name: Body
in: body
schema:
type: object
required:
- branding
properties:
activeEnterprisePortalTemplate:
description: 'Active default template name: "docs", "custom", or empty'
type: string
x-go-name: ActiveEnterprisePortalTemplate
branding:
description: Branding object that will be parsed by the enterprise portal
type: string
x-go-name: Branding
responses:
'200':
$ref: '#/responses/getEnterprisePortalBrandingResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/content-repos/{repo_id}/template-updates/acknowledge:
post:
security:
- api_key: []
- Required RBAC Policy: []
consumes:
- application/json
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Mark pending upstream content template updates reviewed for the current user.
operationId: acknowledgeContentTemplateUpdates
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- type: string
x-go-name: RepoID
description: Content repository identifier
name: repo_id
in: path
required: true
responses:
'200':
$ref: '#/responses/acknowledgeContentTemplateUpdatesResponse'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/content-settings:
put:
description: 'Required RBAC Policy: kots/app/[:appId]/enterprise-portal/documentation/update'
tags:
- enterprisePortal
summary: Update Enterprise Portal content settings for an app.
operationId: updateEnterprisePortalContentSettings
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- name: Body
in: body
schema:
type: object
properties:
hide_unmatched_content_versions:
type: boolean
x-go-name: HideUnmatchedContentVersions
responses:
'200':
$ref: '#/responses/updateContentSettingsResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/content-versions/pin:
post:
security:
- api_key: []
- Required RBAC Policy: []
description: 'Creates a virtual content branch row that pins a release version label to
the content of an existing real branch.'
consumes:
- application/json
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Pin a release version label to an existing content branch
operationId: createContentVersionPin
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- description: JSON input
name: Body
in: body
required: true
schema:
type: object
required:
- version_label
properties:
replace_existing:
description: 'When true, an existing pin row with the same version_label is
removed before the new one is created. Used by `--replace` from the
CLI and the Edit affordance in the vendor portal.'
type: boolean
x-go-name: ReplaceExisting
source_branch_pattern:
description: 'Semver-shaped pattern resolved server-side to the highest matching
branch (e.g. "1.x.x", "1.2.x"). Mutually exclusive with
source_version_id.'
type: string
x-go-name: SourceBranchPattern
source_version_id:
description: 'ID of the existing content version whose content is pinned. Mutually
exclusive with source_branch_pattern.'
type: string
x-go-name: SourceVersionID
version_label:
description: Release version label to pin
type: string
x-go-name: VersionLabel
responses:
'200':
$ref: '#/responses/createContentVersionPinResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/content-versions/{version_id}:
delete:
security:
- api_key: []
- Required RBAC Policy: []
description: 'Removes a content version row and its pages, toc, and theme.
Mainly used to remove pin rows. Real-branch rows can be deleted too —
they''ll be recreated (empty) on the next sync.'
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Delete a content version
operationId: deleteContentVersion
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- type: string
x-go-name: VersionID
description: Content version identifier
name: version_id
in: path
required: true
responses:
'200':
$ref: '#/responses/deleteContentVersionResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/content-versions/{version_id}/dismiss-notice:
post:
security:
- api_key: []
- Required RBAC Policy: []
consumes:
- application/json
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Clear the sync notice for a content version.
operationId: dismissContentVersionNotice
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- type: string
x-go-name: VersionID
description: Content version identifier
name: version_id
in: path
required: true
responses:
'200':
$ref: '#/responses/dismissContentVersionNoticeResponse'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/customer-allowed-domains:
get:
security:
- api_key: []
description: 'Required RBAC Policy:
kots/app/[:appid]/enterprise-portal/customer-allowed-domains/read
kots/app/[:appid]/license/[:customer_id]/read'
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: List customer allowed domains for the enterprise portal
operationId: listCustomerAllowedDomains
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- type: string
x-go-name: FilterCustomerID
description: Filter by customer ID
name: customer_id
in: query
required: true
responses:
'200':
$ref: '#/responses/listCustomerAllowedDomainsResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
post:
security:
- api_key: []
description: 'Required RBAC Policy:
kots/app/[:appid]/enterprise-portal/customer-allowed-domains/create
kots/app/[:appid]/license/[:customer_id]/read'
consumes:
- application/json
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Create a customer allowed domain for the enterprise portal
operationId: createCustomerAllowedDomain
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- description: Create a customer allowed domain for the enterprise portal
name: Body
in: body
required: true
schema:
type: object
properties:
customer_id:
type: string
x-go-name: CustomerID
domain:
type: string
x-go-name: Domain
responses:
'201':
$ref: '#/responses/createCustomerAllowedDomainResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/customer-allowed-domains/{allowedDomainId}:
delete:
security:
- api_key: []
description: 'Required RBAC Policy:
kots/app/[:appid]/enterprise-portal/customer-allowed-domains/delete
kots/app/[:appid]/license/[:customer_id]/read'
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Delete a customer allowed domain for the enterprise portal
operationId: deleteCustomerAllowedDomain
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- type: string
x-go-name: AllowedDomainID
description: The allowed domain ID to delete
name: allowedDomainId
in: path
required: true
- type: string
x-go-name: CustomerID
description: The customer ID for the allowed domain
name: customer_id
in: query
required: true
responses:
'204':
$ref: '#/responses/responseNoContent'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/customer-user:
post:
security:
- api_key: []
- Required RBAC Policy: []
description: Invite a customer user to the enterprise portal, sending an invite email to the customer user.
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Invite a customer user to the enterprise portal
operationId: inviteEnterprisePortalCustomerUser
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- description: Invite a customer user to the enterprise portal
name: Body
in: body
required: true
schema:
type: object
properties:
customer_id:
type: string
x-go-name: CustomerID
email_address:
type: string
x-go-name: EmailAddress
responses:
'201':
$ref: '#/responses/inviteEnterprisePortalCustomerUserResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
delete:
security:
- api_key: []
- Required RBAC Policy: []
description: Delete a customer user for the enterprise portal
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
operationId: deleteEnterprisePortalCustomerUser
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- type: string
description: The email address of the user to delete
name: EmailAddress
in: query
- type: string
x-go-name: CustomerID
description: The customer ID which the user belongs to
name: customer_id
in: query
responses:
'204':
$ref: '#/responses/responseNoContent'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/customer-users:
get:
security:
- api_key: []
description: 'Required RBAC Policy:
kots/app/[:appid]/enterprise-portal/customer-users/read
kots/app/[:appid]/license/[:customer_id]/read'
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: List customer users for the enterprise portal
operationId: listEnterprisePortalCustomerUsers
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- type: boolean
default: false
name: ExcludeInvites
in: query
- type: string
description: Filter by customer ID
name: FilterCustomerID
in: query
- type: string
description: Filter by email address
name: FilterEmail
in: query
- type: integer
format: int64
name: Limit
in: query
- type: integer
format: int64
name: Offset
in: query
- type: string
name: Sort
in: query
- type: string
name: Order
in: query
responses:
'200':
$ref: '#/responses/listEnterprisePortalCustomerUsersResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/documentation:
get:
security:
- api_key: []
description: 'Required RBAC Policy: kots/app/[:appid]/enterprise-portal/documentation/read'
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Get documentation URLs for various installation methods
operationId: getEnterprisePortalDocumentation
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
responses:
'200':
$ref: '#/responses/getDocumentationResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
put:
security:
- api_key: []
description: 'Update documentation URLs and markdown content for various installation methods
Required RBAC Policy: kots/app/[:appid]/enterprise-portal/documentation/update'
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Update documentation URLs
operationId: updateEnterprisePortalDocumentation
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- description: JSON input
name: Body
in: body
required: true
schema:
type: object
properties:
embeddedClusterInstallURL:
description: URL for Embedded Cluster installation documentation
type: string
x-go-name: EmbeddedClusterInstallURL
embeddedClusterPostInstall:
description: Markdown content for Embedded Cluster post-installation steps
type: string
x-go-name: EmbeddedClusterPostInstall
embeddedClusterPreInstall:
description: Markdown content for Embedded Cluster pre-installation steps
type: string
x-go-name: EmbeddedClusterPreInstall
helmInstallURL:
description: URL for Helm installation documentation
type: string
x-go-name: HelmInstallURL
helmPostInstall:
description: Markdown content for Helm post-installation steps
type: string
x-go-name: HelmPostInstall
helmPreInstall:
description: Markdown content for Helm pre-installation steps
type: string
x-go-name: HelmPreInstall
kotsInstallURL:
description: URL for KOTS installation documentation
type: string
x-go-name: KOTSInstallURL
kurlInstallURL:
description: URL for kURL installation documentation
type: string
x-go-name: KURLInstallURL
valuesOverrideURL:
description: URL for Values Override documentation
type: string
x-go-name: ValuesOverrideURL
responses:
'200':
$ref: '#/responses/updateDocumentationResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
/app/{app_id}/enterprise-portal/email-history:
get:
security:
- api_key: []
description: 'Returns a paginated list of emails sent through the enterprise portal with their delivery status.
Required RBAC Policy:
kots/app/{app_id}/enterprise-portal/email-history/read'
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: List email history for the enterprise portal
operationId: listEnterprisePortalEmailHistory
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- type: string
description: Filter by email type (login, invite, version_update)
name: EmailType
in: query
- type: string
description: Filter by status (sent, delivered, bounced, spam_complaint)
name: Status
in: query
- type: string
description: Filter by customer ID
name: CustomerID
in: query
- type: integer
format: int64
default: 25
name: Limit
in: query
- type: integer
format: int64
default: 0
name: Offset
in: query
responses:
'200':
$ref: '#/responses/listEnterprisePortalEmailHistoryResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/failed-login-attempts:
get:
security:
- api_key: []
description: 'List failed login attempts for the enterprise portal users.
Required RBAC Policy: kots/app/[:appid]/enterprise-portal/failed-login-attempts/read'
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: List failed login attempts
operationId: listFailedLoginAttempts
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- type: integer
format: int64
description: Maximum number of results to return
name: Limit
in: query
- type: integer
format: int64
description: Number of results to skip
name: Offset
in: query
- type: string
description: Filter by email address
name: FilterEmail
in: query
- type: string
description: Sort field
name: Sort
in: query
- type: string
description: Sort order (asc or desc)
name: Order
in: query
responses:
'200':
$ref: '#/responses/listFailedLoginAttemptsResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/features:
get:
security:
- api_key: []
description: 'Required RBAC Policy: kots/app/[:appid]/read'
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Get Enterprise Portal feature settings for an app
operationId: getPortalFeatures
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
responses:
'200':
$ref: '#/responses/getPortalFeaturesResponse'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
put:
security:
- api_key: []
description: 'Required RBAC Policy: kots/app/[:appid]/update'
consumes:
- application/json
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Update Enterprise Portal feature settings for an app
operationId: updatePortalFeatures
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- name: Body
in: body
schema:
type: object
properties:
askAiEnabled:
description: Whether the Ask AI assistant should be enabled in the Enterprise Portal.
type: boolean
x-go-name: AskAiEnabled
supportBundleUploadEnabled:
description: Whether support bundle upload should be enabled in the Enterprise Portal.
type: boolean
x-go-name: SupportBundleUploadEnabled
responses:
'200':
$ref: '#/responses/getPortalFeaturesResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/install-attempts:
get:
security:
- api_key: []
- Required RBAC Policy: []
description: List install attempts for a customer or all customers in the app.
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: List installation attempts for the enterprise portal
operationId: listInstallAttempts
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- type: string
description: Filter by a specific customer ID
name: FilterCustomerID
in: query
- type: string
description: Filter by a specific instance ID
name: FilterInstanceID
in: query
- type: integer
format: int64
description: Maximum number of results to return
name: Limit
in: query
- type: integer
format: int64
description: Number of results to skip
name: Offset
in: query
- type: string
description: Filter by status
name: FilterStatus
in: query
responses:
'200':
$ref: '#/responses/listInstallAttemptsResponse'
'400':
$ref: '#/responses/responseErrBadRequest'
'401':
$ref: '#/responses/responseErrUnauthorized'
'403':
$ref: '#/responses/responseErrForbidden'
'404':
$ref: '#/responses/responseErrNotFound'
/app/{app_id}/enterprise-portal/install-options:
post:
security:
- api_key: []
- Required RBAC Policy: []
description: 'Create an installation options record for a customer describing the installation configuration. Automatically creating
a service account for the installation that can be used to perform the actual installation.
Optionally include generated install instructions by setting the includeInstructions query parameter to true.'
consumes:
- application/json
produces:
- application/json
schemes:
- https
tags:
- enterprisePortal
summary: Create an installation options record
operationId: createInstallOptions
parameters:
- type: string
x-go-name: AppID
description: App identifier
name: app_id
in: path
required: true
- type: boolean
x-go-name: WithInstructions
description: Whether to include install instructions in the response
name: includeInstructions
in: query
- description: JSON input
name: Body
in: body
required: true
schema:
type: object
required:
- customer_id
- install_type
- instance_name
- network_availability
- channel_id
- channel_release_sequence
properties:
admin_console_url:
description: URL for the admin console, used for updates
type: string
x-go-name: AdminConsoleURL
channel_id:
description: Channel ID to use for the installation
type: string
x-go-name: ChannelID
channel_release_sequence:
description: Channel release sequence number to use for the installation
type: integer
format: int64
x-go-name: ChannelReleaseSequence
custome
# --- truncated at 32 KB (89 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/replicated/refs/heads/main/openapi/replicated-enterpriseportal-api-openapi.yml