iOS

iOS InAppPurchases API

The InAppPurchases API from iOS — 21 operation(s) for inapppurchases.

OpenAPI Specification

ios-inapppurchases-api-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: App Store Connect AccessibilityDeclarations InAppPurchases API
  version: 4.3.1
  x-platforms:
    app_store_connect_api: App Store Connect API
  description: The App Store Connect API is the standards-based REST API Apple provides to automate tasks across App Store Connect, Xcode, and Certificates, Identifiers & Profiles. It covers apps, builds, TestFlight, in-app purchases, subscriptions, Game Center, Xcode Cloud, provisioning, pricing and availability, and the full reporting surface (analytics, sales and trends, financial reports, power and performance). This spec is the official OpenAPI 3.0 document published by Apple at https://developer.apple.com/app-store-connect/api/ — mirrored here unmodified except for title-cased operation summaries.
servers:
- url: https://api.appstoreconnect.apple.com/
security:
- itc-bearer-token: []
tags:
- name: InAppPurchases
paths:
  /v1/inAppPurchases/{id}:
    parameters:
    - name: id
      in: path
      description: the id of the requested resource
      schema:
        type: string
      style: simple
      required: true
    get:
      tags:
      - InAppPurchases
      operationId: inAppPurchases_getInstance
      deprecated: true
      parameters:
      - name: fields[inAppPurchases]
        in: query
        description: the fields to include for returned resources of type inAppPurchases
        schema:
          type: array
          items:
            type: string
            enum:
            - referenceName
            - productId
            - inAppPurchaseType
            - state
            - apps
        style: form
        explode: false
        required: false
      - name: fields[apps]
        in: query
        description: the fields to include for returned resources of type apps
        schema:
          type: array
          items:
            type: string
            enum:
            - accessibilityUrl
            - name
            - bundleId
            - sku
            - primaryLocale
            - isOrEverWasMadeForKids
            - subscriptionStatusUrl
            - subscriptionStatusUrlVersion
            - subscriptionStatusUrlForSandbox
            - subscriptionStatusUrlVersionForSandbox
            - contentRightsDeclaration
            - streamlinedPurchasingEnabled
            - accessibilityDeclarations
            - appEncryptionDeclarations
            - appStoreIcon
            - ciProduct
            - betaTesters
            - betaGroups
            - appStoreVersions
            - appTags
            - preReleaseVersions
            - betaAppLocalizations
            - builds
            - betaLicenseAgreement
            - betaAppReviewDetail
            - appInfos
            - appClips
            - appPricePoints
            - endUserLicenseAgreement
            - appPriceSchedule
            - appAvailabilityV2
            - inAppPurchases
            - subscriptionGroups
            - gameCenterEnabledVersions
            - perfPowerMetrics
            - appCustomProductPages
            - inAppPurchasesV2
            - promotedPurchases
            - appEvents
            - reviewSubmissions
            - subscriptionGracePeriod
            - customerReviews
            - customerReviewSummarizations
            - gameCenterDetail
            - appStoreVersionExperimentsV2
            - alternativeDistributionKey
            - analyticsReportRequests
            - marketplaceSearchDetail
            - buildUploads
            - backgroundAssets
            - betaFeedbackScreenshotSubmissions
            - betaFeedbackCrashSubmissions
            - searchKeywords
            - webhooks
            - androidToIosAppMappingDetails
        style: form
        explode: false
        required: false
      - name: include
        in: query
        description: comma-separated list of relationships to include
        schema:
          type: array
          items:
            type: string
            enum:
            - apps
        style: form
        explode: false
        required: false
      - name: limit[apps]
        in: query
        description: maximum number of related apps returned (when they are included)
        schema:
          type: integer
          maximum: 50
        style: form
        required: false
      responses:
        '400':
          description: Parameter error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '200':
          description: Single InAppPurchase
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InAppPurchaseResponse'
        '429':
          description: Rate limit exceeded error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      summary: Get in App Purchases
  /v2/inAppPurchases:
    post:
      tags:
      - InAppPurchases
      operationId: inAppPurchasesV2_createInstance
      requestBody:
        description: InAppPurchase representation
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InAppPurchaseV2CreateRequest'
        required: true
      responses:
        '400':
          description: Parameter error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable request entity error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '201':
          description: Single InAppPurchase
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InAppPurchaseV2Response'
        '409':
          description: Request entity error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      summary: Create in App Purchases V2
  /v2/inAppPurchases/{id}:
    parameters:
    - name: id
      in: path
      description: the id of the requested resource
      schema:
        type: string
      style: simple
      required: true
    get:
      tags:
      - InAppPurchases
      operationId: inAppPurchasesV2_getInstance
      parameters:
      - name: fields[inAppPurchases]
        in: query
        description: the fields to include for returned resources of type inAppPurchases
        schema:
          type: array
          items:
            type: string
            enum:
            - name
            - productId
            - inAppPurchaseType
            - state
            - reviewNote
            - familySharable
            - contentHosting
            - inAppPurchaseLocalizations
            - pricePoints
            - content
            - appStoreReviewScreenshot
            - promotedPurchase
            - iapPriceSchedule
            - inAppPurchaseAvailability
            - images
            - offerCodes
        style: form
        explode: false
        required: false
      - name: fields[inAppPurchaseLocalizations]
        in: query
        description: the fields to include for returned resources of type inAppPurchaseLocalizations
        schema:
          type: array
          items:
            type: string
            enum:
            - name
            - locale
            - description
            - state
            - inAppPurchaseV2
        style: form
        explode: false
        required: false
      - name: fields[inAppPurchasePricePoints]
        in: query
        description: the fields to include for returned resources of type inAppPurchasePricePoints
        schema:
          type: array
          items:
            type: string
            enum:
            - customerPrice
            - proceeds
            - territory
            - equalizations
        style: form
        explode: false
        required: false
      - name: fields[inAppPurchaseContents]
        in: query
        description: the fields to include for returned resources of type inAppPurchaseContents
        schema:
          type: array
          items:
            type: string
            enum:
            - fileName
            - fileSize
            - url
            - lastModifiedDate
            - inAppPurchaseV2
        style: form
        explode: false
        required: false
      - name: fields[inAppPurchaseAppStoreReviewScreenshots]
        in: query
        description: the fields to include for returned resources of type inAppPurchaseAppStoreReviewScreenshots
        schema:
          type: array
          items:
            type: string
            enum:
            - fileSize
            - fileName
            - sourceFileChecksum
            - imageAsset
            - assetToken
            - assetType
            - uploadOperations
            - assetDeliveryState
            - inAppPurchaseV2
        style: form
        explode: false
        required: false
      - name: fields[promotedPurchases]
        in: query
        description: the fields to include for returned resources of type promotedPurchases
        schema:
          type: array
          items:
            type: string
            enum:
            - visibleForAllUsers
            - enabled
            - state
            - inAppPurchaseV2
            - subscription
        style: form
        explode: false
        required: false
      - name: fields[inAppPurchasePriceSchedules]
        in: query
        description: the fields to include for returned resources of type inAppPurchasePriceSchedules
        schema:
          type: array
          items:
            type: string
            enum:
            - baseTerritory
            - manualPrices
            - automaticPrices
        style: form
        explode: false
        required: false
      - name: fields[inAppPurchaseAvailabilities]
        in: query
        description: the fields to include for returned resources of type inAppPurchaseAvailabilities
        schema:
          type: array
          items:
            type: string
            enum:
            - availableInNewTerritories
            - availableTerritories
        style: form
        explode: false
        required: false
      - name: fields[inAppPurchaseImages]
        in: query
        description: the fields to include for returned resources of type inAppPurchaseImages
        schema:
          type: array
          items:
            type: string
            enum:
            - fileSize
            - fileName
            - sourceFileChecksum
            - assetToken
            - imageAsset
            - uploadOperations
            - state
            - inAppPurchase
        style: form
        explode: false
        required: false
      - name: fields[inAppPurchaseOfferCodes]
        in: query
        description: the fields to include for returned resources of type inAppPurchaseOfferCodes
        schema:
          type: array
          items:
            type: string
            enum:
            - name
            - customerEligibilities
            - productionCodeCount
            - sandboxCodeCount
            - active
            - oneTimeUseCodes
            - customCodes
            - prices
        style: form
        explode: false
        required: false
      - name: include
        in: query
        description: comma-separated list of relationships to include
        schema:
          type: array
          items:
            type: string
            enum:
            - inAppPurchaseLocalizations
            - pricePoints
            - content
            - appStoreReviewScreenshot
            - promotedPurchase
            - iapPriceSchedule
            - inAppPurchaseAvailability
            - images
            - offerCodes
        style: form
        explode: false
        required: false
      - name: limit[images]
        in: query
        description: maximum number of related images returned (when they are included)
        schema:
          type: integer
          maximum: 50
        style: form
        required: false
      - name: limit[inAppPurchaseLocalizations]
        in: query
        description: maximum number of related inAppPurchaseLocalizations returned (when they are included)
        schema:
          type: integer
          maximum: 50
        style: form
        required: false
      - name: limit[offerCodes]
        in: query
        description: maximum number of related offerCodes returned (when they are included)
        schema:
          type: integer
          maximum: 50
        style: form
        required: false
      - name: limit[pricePoints]
        in: query
        description: maximum number of related pricePoints returned (when they are included)
        schema:
          type: integer
          maximum: 8000
        style: form
        required: false
      responses:
        '400':
          description: Parameter error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '200':
          description: Single InAppPurchase
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InAppPurchaseV2Response'
        '429':
          description: Rate limit exceeded error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      summary: Get in App Purchases V2
    patch:
      tags:
      - InAppPurchases
      operationId: inAppPurchasesV2_updateInstance
      requestBody:
        description: InAppPurchase representation
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/InAppPurchaseV2UpdateRequest'
        required: true
      responses:
        '400':
          description: Parameter error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '422':
          description: Unprocessable request entity error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '200':
          description: Single InAppPurchase
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InAppPurchaseV2Response'
        '409':
          description: Request entity error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Rate limit exceeded error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      summary: Update in App Purchases V2
    delete:
      tags:
      - InAppPurchases
      operationId: inAppPurchasesV2_deleteInstance
      responses:
        '400':
          description: Parameter error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '204':
          description: Success (no content)
        '429':
          description: Rate limit exceeded error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      summary: Delete in App Purchases V2
  /v2/inAppPurchases/{id}/relationships/appStoreReviewScreenshot:
    parameters:
    - name: id
      in: path
      description: the id of the requested resource
      schema:
        type: string
      style: simple
      required: true
    get:
      tags:
      - InAppPurchases
      operationId: inAppPurchasesV2_appStoreReviewScreenshot_getToOneRelationship
      parameters: []
      responses:
        '400':
          description: Parameter error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '200':
          description: Related linkage
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InAppPurchaseV2AppStoreReviewScreenshotLinkageResponse'
        '429':
          description: Rate limit exceeded error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      summary: Get Related in App Purchases V2 / App Store Review Screenshot
  /v2/inAppPurchases/{id}/appStoreReviewScreenshot:
    parameters:
    - name: id
      in: path
      description: the id of the requested resource
      schema:
        type: string
      style: simple
      required: true
    get:
      tags:
      - InAppPurchases
      operationId: inAppPurchasesV2_appStoreReviewScreenshot_getToOneRelated
      parameters:
      - name: fields[inAppPurchaseAppStoreReviewScreenshots]
        in: query
        description: the fields to include for returned resources of type inAppPurchaseAppStoreReviewScreenshots
        schema:
          type: array
          items:
            type: string
            enum:
            - fileSize
            - fileName
            - sourceFileChecksum
            - imageAsset
            - assetToken
            - assetType
            - uploadOperations
            - assetDeliveryState
            - inAppPurchaseV2
        style: form
        explode: false
      - name: fields[inAppPurchases]
        in: query
        description: the fields to include for returned resources of type inAppPurchases
        schema:
          type: array
          items:
            type: string
            enum:
            - name
            - productId
            - inAppPurchaseType
            - state
            - reviewNote
            - familySharable
            - contentHosting
            - inAppPurchaseLocalizations
            - pricePoints
            - content
            - appStoreReviewScreenshot
            - promotedPurchase
            - iapPriceSchedule
            - inAppPurchaseAvailability
            - images
            - offerCodes
        style: form
        explode: false
      - name: include
        in: query
        description: comma-separated list of relationships to include
        schema:
          type: array
          items:
            type: string
            enum:
            - inAppPurchaseV2
        style: form
        explode: false
      responses:
        '400':
          description: Parameter error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '200':
          description: Single InAppPurchaseAppStoreReviewScreenshot
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InAppPurchaseAppStoreReviewScreenshotResponse'
        '429':
          description: Rate limit exceeded error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      summary: Get Related in App Purchases V2 / App Store Review Screenshot
  /v2/inAppPurchases/{id}/relationships/content:
    parameters:
    - name: id
      in: path
      description: the id of the requested resource
      schema:
        type: string
      style: simple
      required: true
    get:
      tags:
      - InAppPurchases
      operationId: inAppPurchasesV2_content_getToOneRelationship
      parameters: []
      responses:
        '400':
          description: Parameter error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '200':
          description: Related linkage
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InAppPurchaseV2ContentLinkageResponse'
        '429':
          description: Rate limit exceeded error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      summary: Get Related in App Purchases V2 / Content
  /v2/inAppPurchases/{id}/content:
    parameters:
    - name: id
      in: path
      description: the id of the requested resource
      schema:
        type: string
      style: simple
      required: true
    get:
      tags:
      - InAppPurchases
      operationId: inAppPurchasesV2_content_getToOneRelated
      parameters:
      - name: fields[inAppPurchaseContents]
        in: query
        description: the fields to include for returned resources of type inAppPurchaseContents
        schema:
          type: array
          items:
            type: string
            enum:
            - fileName
            - fileSize
            - url
            - lastModifiedDate
            - inAppPurchaseV2
        style: form
        explode: false
      - name: fields[inAppPurchases]
        in: query
        description: the fields to include for returned resources of type inAppPurchases
        schema:
          type: array
          items:
            type: string
            enum:
            - name
            - productId
            - inAppPurchaseType
            - state
            - reviewNote
            - familySharable
            - contentHosting
            - inAppPurchaseLocalizations
            - pricePoints
            - content
            - appStoreReviewScreenshot
            - promotedPurchase
            - iapPriceSchedule
            - inAppPurchaseAvailability
            - images
            - offerCodes
        style: form
        explode: false
      - name: include
        in: query
        description: comma-separated list of relationships to include
        schema:
          type: array
          items:
            type: string
            enum:
            - inAppPurchaseV2
        style: form
        explode: false
      responses:
        '400':
          description: Parameter error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '200':
          description: Single InAppPurchaseContent
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InAppPurchaseContentResponse'
        '429':
          description: Rate limit exceeded error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      summary: Get Related in App Purchases V2 / Content
  /v2/inAppPurchases/{id}/relationships/iapPriceSchedule:
    parameters:
    - name: id
      in: path
      description: the id of the requested resource
      schema:
        type: string
      style: simple
      required: true
    get:
      tags:
      - InAppPurchases
      operationId: inAppPurchasesV2_iapPriceSchedule_getToOneRelationship
      parameters: []
      responses:
        '400':
          description: Parameter error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '200':
          description: Related linkage
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InAppPurchaseV2IapPriceScheduleLinkageResponse'
        '429':
          description: Rate limit exceeded error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      summary: Get Related in App Purchases V2 / Iap Price Schedule
  /v2/inAppPurchases/{id}/iapPriceSchedule:
    parameters:
    - name: id
      in: path
      description: the id of the requested resource
      schema:
        type: string
      style: simple
      required: true
    get:
      tags:
      - InAppPurchases
      operationId: inAppPurchasesV2_iapPriceSchedule_getToOneRelated
      parameters:
      - name: fields[inAppPurchasePriceSchedules]
        in: query
        description: the fields to include for returned resources of type inAppPurchasePriceSchedules
        schema:
          type: array
          items:
            type: string
            enum:
            - baseTerritory
            - manualPrices
            - automaticPrices
        style: form
        explode: false
      - name: fields[territories]
        in: query
        description: the fields to include for returned resources of type territories
        schema:
          type: array
          items:
            type: string
            enum:
            - currency
        style: form
        explode: false
      - name: fields[inAppPurchasePrices]
        in: query
        description: the fields to include for returned resources of type inAppPurchasePrices
        schema:
          type: array
          items:
            type: string
            enum:
            - startDate
            - endDate
            - manual
            - inAppPurchasePricePoint
            - territory
        style: form
        explode: false
      - name: include
        in: query
        description: comma-separated list of relationships to include
        schema:
          type: array
          items:
            type: string
            enum:
            - baseTerritory
            - manualPrices
            - automaticPrices
        style: form
        explode: false
      - name: limit[manualPrices]
        in: query
        description: maximum number of related manualPrices returned (when they are included)
        schema:
          type: integer
          maximum: 50
        style: form
      - name: limit[automaticPrices]
        in: query
        description: maximum number of related automaticPrices returned (when they are included)
        schema:
          type: integer
          maximum: 50
        style: form
      responses:
        '400':
          description: Parameter error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized error(s)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Not found error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '200':
          description: Single InAppPurchasePriceSchedule
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InAppPurchasePriceS

# --- truncated at 32 KB (139 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/ios/refs/heads/main/openapi/ios-inapppurchases-api-openapi.yml