MODIVO Commerce REST API

The public REST surface of the MODIVO storefront, served by its Adobe Commerce / Magento 2.4 deployment at https://modivo.pl/rest/all and self-described by a Swagger 2.0 document the platform generates at /rest/all/schema?services=all. 57 operations across 48 paths cover guest cart creation and management, shipping and totals estimation, coupon application, payment method selection and guest order placement, customer account creation and password reset, product render info, catalog search, directory (country/currency) reference data, gift messages, in-store pickup locations, PayPal and Braintree payment services, and MODIVO-specific extensions for marketplace order placement, the MODIVO My Returns webhook, a JWT issuing service and a Trustmate review display integration. Anonymous callers can read directory and guest-cart resources; everything else requires a Magento integration or customer bearer token.

Documentation

Specifications

Other Resources

OpenAPI Specification

modivo-commerce-rest-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: MODIVO Commerce REST API
  version: '2.4'
  description: Public REST API surface of the MODIVO storefront (modivo.pl), served by its Adobe Commerce / Magento 2.4 deployment
    and self-described at https://modivo.pl/rest/all/schema?services=all. Covers guest cart and checkout, guest order placement,
    marketplace order placement, customer account management, product render info, search, directory data, gift messages,
    in-store pickup locations, PayPal/Braintree payment services, and MODIVO-specific extensions (MODIVO My Returns webhook,
    eobuwie JWT service, Trustmate review integration). Anonymous access is limited to unauthenticated storefront operations;
    the remainder requires a Magento integration or customer bearer token. Mechanically converted from the provider's own
    Swagger 2.0 document; the verbatim original is in openapi/_original/.
  x-source: https://modivo.pl/rest/all/schema?services=all
servers:
- url: https://modivo.pl/rest/all
tags:
- name: directoryCurrencyInformationAcquirerV1
  description: Currency information acquirer interface
- name: directoryCountryInformationAcquirerV1
  description: Country information acquirer interface
- name: customerAccountManagementV1
  description: Interface for managing customers accounts.
- name: searchV1
  description: Search API for all requests
- name: catalogProductRenderListV1
  description: Interface which provides product renders information for products.
- name: quoteGuestCartRepositoryV1
  description: Cart Repository interface for guest carts.
- name: quoteGuestCartManagementV1
  description: Cart Management interface for guest carts.
- name: quoteGuestShippingMethodManagementV1
  description: Shipping method management interface for guest carts.
- name: quoteGuestShipmentEstimationV1
  description: Interface GuestShipmentEstimationInterface
- name: quoteGuestCartItemRepositoryV1
  description: Cart Item repository interface for guest carts.
- name: quoteGuestPaymentMethodManagementV1
  description: Payment method management interface for guest carts.
- name: quoteGuestBillingAddressManagementV1
  description: Billing address management interface for guest carts.
- name: quoteGuestCouponManagementV1
  description: Coupon management interface for guest carts.
- name: quoteGuestCartTotalManagementV1
  description: Bundled API to collect totals for cart based on shipping/payment methods and additional data.
- name: quoteGuestCartTotalRepositoryV1
  description: Cart totals repository interface for guest carts.
- name: checkoutGuestShippingInformationManagementV1
  description: Interface for managing guest shipping address information
- name: checkoutGuestTotalsInformationManagementV1
  description: Interface for guest quote totals calculation
- name: checkoutGuestPaymentInformationManagementV1
  description: Interface for managing guest payment information
- name: integrationAdminTokenServiceV1
  description: Interface providing token generation for Admins
- name: integrationCustomerTokenServiceV1
  description: Interface providing token generation for Customers
- name: giftMessageGuestCartRepositoryV1
  description: Interface GuestCartRepositoryInterface
- name: giftMessageGuestItemRepositoryV1
  description: Interface GuestItemRepositoryInterface
- name: inventoryInStorePickupApiGetPickupLocationsV1
  description: Get Pickup Locations filtered by provided Search Request. Pickup Location entities are Immutable object and
    can not be changed after creation. All modification of Pickup Location must be done through @see \Magento\InventoryApi\Api\SourceRepositoryInterface
- name: paymentServicesPaypalPaymentConfigRequestV1
  description: ''
- name: paymentServicesPaypalPaymentOrderRequestV1
  description: An interface for the REST WebAPI request to create an order
- name: paymentServicesPaypalPaymentSdkRequestV1
  description: An interface for the REST WebAPI to get payment sdk urls
- name: paymentServicesPaypalCompleteOrderV1
  description: ''
- name: eobJWTHttpServiceV1
  description: Interface HttpServiceInterface
- name: eobTrustmateIntegrationDisplayApiV1
  description: ''
- name: marketplacePlaceOrderOrderManagementV1
  description: ''
- name: modivoMyReturnsWebhookWebhookV1
  description: ''
- name: payPalBraintreeAuthV1
  description: Interface AuthInterface
paths:
  /V1/directory/currency:
    get:
      tags:
      - directoryCurrencyInformationAcquirerV1
      description: Get currency information for the store.
      operationId: GetV1DirectoryCurrency
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id001
                $ref: '#/components/schemas/directory-data-currency-information-interface'
            application/xml:
              schema: *id001
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id002
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id002
  /V1/directory/countries:
    get:
      tags:
      - directoryCountryInformationAcquirerV1
      description: Get all countries and regions information for the store.
      operationId: GetV1DirectoryCountries
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id003
                type: array
                items:
                  $ref: '#/components/schemas/directory-data-country-information-interface'
            application/xml:
              schema: *id003
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id004
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id004
  /V1/directory/countries/{countryId}:
    get:
      tags:
      - directoryCountryInformationAcquirerV1
      description: Get country and region information for the store.
      operationId: GetV1DirectoryCountriesCountryId
      parameters:
      - name: countryId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id005
                $ref: '#/components/schemas/directory-data-country-information-interface'
            application/xml:
              schema: *id005
        '400':
          description: 400 Bad Request
          content:
            application/json:
              schema: &id006
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id006
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id007
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id007
  /V1/customers:
    post:
      tags:
      - customerAccountManagementV1
      description: Create customer account. Perform necessary business operations like sending email.
      operationId: PostV1Customers
      requestBody:
        required: false
        content:
          application/json:
            schema: &id008
              required:
              - customer
              properties:
                customer:
                  $ref: '#/components/schemas/customer-data-customer-interface'
                password:
                  type: string
                redirectUrl:
                  type: string
              type: object
              xml:
                name: request
          application/xml:
            schema: *id008
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id009
                $ref: '#/components/schemas/customer-data-customer-interface'
            application/xml:
              schema: *id009
        '500':
          description: Internal Server error
          content:
            application/json:
              schema: &id010
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id010
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id011
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id011
  /V1/customers/{customerId}/password/resetLinkToken/{resetPasswordLinkToken}:
    get:
      tags:
      - customerAccountManagementV1
      description: Check if password reset token is valid.
      operationId: GetV1CustomersCustomerIdPasswordResetLinkTokenResetPasswordLinkToken
      parameters:
      - name: customerId
        in: path
        description: If null is given then a customer will be matched by the RP token.
        required: true
        schema:
          type: integer
      - name: resetPasswordLinkToken
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id012
                type: boolean
                description: True if the token is valid
            application/xml:
              schema: *id012
        '400':
          description: 400 Bad Request
          content:
            application/json:
              schema: &id013
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id013
        '500':
          description: Internal Server error
          content:
            application/json:
              schema: &id014
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id014
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id015
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id015
  /V1/customers/password:
    put:
      tags:
      - customerAccountManagementV1
      description: Send an email to the customer with a password reset link.
      operationId: PutV1CustomersPassword
      requestBody:
        required: false
        content:
          application/json:
            schema: &id016
              required:
              - email
              - template
              properties:
                email:
                  type: string
                template:
                  type: string
                websiteId:
                  type: integer
              type: object
              xml:
                name: request
          application/xml:
            schema: *id016
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id017
                type: boolean
                description: true on success
            application/xml:
              schema: *id017
        '500':
          description: Internal Server error
          content:
            application/json:
              schema: &id018
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id018
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id019
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id019
  /V1/customers/resetPassword:
    post:
      tags:
      - customerAccountManagementV1
      description: Reset customer password.
      operationId: PostV1CustomersResetPassword
      requestBody:
        required: false
        content:
          application/json:
            schema: &id020
              required:
              - email
              - resetToken
              - newPassword
              properties:
                email:
                  type: string
                  description: If empty value given then the customer will be matched by the RP token.
                resetToken:
                  type: string
                newPassword:
                  type: string
              type: object
              xml:
                name: request
          application/xml:
            schema: *id020
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id021
                type: boolean
                description: true on success
            application/xml:
              schema: *id021
        '500':
          description: Internal Server error
          content:
            application/json:
              schema: &id022
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id022
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id023
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id023
  /V1/customers/isEmailAvailable:
    post:
      tags:
      - customerAccountManagementV1
      description: Check if given email is associated with a customer account in given website.
      operationId: PostV1CustomersIsEmailAvailable
      requestBody:
        required: false
        content:
          application/json:
            schema: &id024
              required:
              - customerEmail
              properties:
                customerEmail:
                  type: string
                websiteId:
                  type: integer
                  description: If not set, will use the current websiteId
              type: object
              xml:
                name: request
          application/xml:
            schema: *id024
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id025
                type: boolean
            application/xml:
              schema: *id025
        '500':
          description: Internal Server error
          content:
            application/json:
              schema: &id026
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id026
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id027
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id027
  /V1/search:
    get:
      tags:
      - searchV1
      description: Make Full Text Search and return found Documents
      operationId: GetV1Search
      parameters:
      - name: searchCriteria[requestName]
        in: query
        schema:
          type: string
      - name: searchCriteria[filterGroups][0][filters][0][field]
        in: query
        description: Field
        schema:
          type: string
      - name: searchCriteria[filterGroups][0][filters][0][value]
        in: query
        description: Value
        schema:
          type: string
      - name: searchCriteria[filterGroups][0][filters][0][conditionType]
        in: query
        description: Condition type
        schema:
          type: string
      - name: searchCriteria[sortOrders][0][field]
        in: query
        description: Sorting field.
        schema:
          type: string
      - name: searchCriteria[sortOrders][0][direction]
        in: query
        description: Sorting direction.
        schema:
          type: string
      - name: searchCriteria[pageSize]
        in: query
        description: Page size.
        schema:
          type: integer
      - name: searchCriteria[currentPage]
        in: query
        description: Current page.
        schema:
          type: integer
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id028
                $ref: '#/components/schemas/framework-search-search-result-interface'
            application/xml:
              schema: *id028
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id029
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id029
  /V1/products-render-info:
    get:
      tags:
      - catalogProductRenderListV1
      description: Collect and retrieve the list of product render info. This info contains raw prices and formatted prices,
        product name, stock status, store_id, etc.
      operationId: GetV1Productsrenderinfo
      parameters:
      - name: searchCriteria[filterGroups][0][filters][0][field]
        in: query
        description: Field
        schema:
          type: string
      - name: searchCriteria[filterGroups][0][filters][0][value]
        in: query
        description: Value
        schema:
          type: string
      - name: searchCriteria[filterGroups][0][filters][0][conditionType]
        in: query
        description: Condition type
        schema:
          type: string
      - name: searchCriteria[sortOrders][0][field]
        in: query
        description: Sorting field.
        schema:
          type: string
      - name: searchCriteria[sortOrders][0][direction]
        in: query
        description: Sorting direction.
        schema:
          type: string
      - name: searchCriteria[pageSize]
        in: query
        description: Page size.
        schema:
          type: integer
      - name: searchCriteria[currentPage]
        in: query
        description: Current page.
        schema:
          type: integer
      - name: storeId
        in: query
        required: true
        schema:
          type: integer
      - name: currencyCode
        in: query
        required: true
        schema:
          type: string
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id030
                $ref: '#/components/schemas/catalog-data-product-render-search-results-interface'
            application/xml:
              schema: *id030
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id031
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id031
  /V1/guest-carts/{cartId}:
    get:
      tags:
      - quoteGuestCartRepositoryV1
      description: Enable a guest user to return information for a specified cart.
      operationId: GetV1GuestcartsCartId
      parameters:
      - name: cartId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id032
                $ref: '#/components/schemas/quote-data-cart-interface'
            application/xml:
              schema: *id032
        '400':
          description: 400 Bad Request
          content:
            application/json:
              schema: &id033
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id033
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id034
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id034
  /V1/guest-carts:
    post:
      tags:
      - quoteGuestCartManagementV1
      description: Enable an customer or guest user to create an empty cart and quote for an anonymous customer.
      operationId: PostV1Guestcarts
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id035
                type: string
                description: Cart ID.
            application/xml:
              schema: *id035
        '400':
          description: 400 Bad Request
          content:
            application/json:
              schema: &id036
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id036
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id037
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id037
  /V1/guest-carts/{cartId}/order:
    put:
      tags:
      - quoteGuestCartManagementV1
      description: Place an order for a specified cart.
      operationId: PutV1GuestcartsCartIdOrder
      parameters:
      - name: cartId
        in: path
        description: The cart ID.
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema: &id038
              properties:
                paymentMethod:
                  $ref: '#/components/schemas/quote-data-payment-interface'
              type: object
              xml:
                name: request
          application/xml:
            schema: *id038
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id039
                type: integer
                description: Order ID.
            application/xml:
              schema: *id039
        '400':
          description: 400 Bad Request
          content:
            application/json:
              schema: &id040
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id040
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id041
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id041
  /V1/guest-carts/{cartId}/shipping-methods:
    get:
      tags:
      - quoteGuestShippingMethodManagementV1
      description: List applicable shipping methods for a specified quote.
      operationId: GetV1GuestcartsCartIdShippingmethods
      parameters:
      - name: cartId
        in: path
        description: The shopping cart ID.
        required: true
        schema:
          type: string
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id042
                type: array
                description: An array of shipping methods.
                items:
                  $ref: '#/components/schemas/quote-data-shipping-method-interface'
            application/xml:
              schema: *id042
        '400':
          description: 400 Bad Request
          content:
            application/json:
              schema: &id043
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id043
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id044
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id044
  /V1/guest-carts/{cartId}/estimate-shipping-methods:
    post:
      tags:
      - quoteGuestShipmentEstimationV1
      description: Estimate shipping by address and return list of available shipping methods
      operationId: PostV1GuestcartsCartIdEstimateshippingmethods
      parameters:
      - name: cartId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema: &id045
              required:
              - address
              properties:
                address:
                  $ref: '#/components/schemas/quote-data-address-interface'
              type: object
              xml:
                name: request
          application/xml:
            schema: *id045
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id046
                type: array
                description: An array of shipping methods
                items:
                  $ref: '#/components/schemas/quote-data-shipping-method-interface'
            application/xml:
              schema: *id046
        '400':
          description: 400 Bad Request
          content:
            application/json:
              schema: &id047
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id047
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id048
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id048
  /V1/guest-carts/{cartId}/items:
    get:
      tags:
      - quoteGuestCartItemRepositoryV1
      description: List items that are assigned to a specified cart.
      operationId: GetV1GuestcartsCartIdItems
      parameters:
      - name: cartId
        in: path
        description: The cart ID.
        required: true
        schema:
          type: string
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id049
                type: array
                description: Array of items.
                items:
                  $ref: '#/components/schemas/quote-data-cart-item-interface'
            application/xml:
              schema: *id049
        '400':
          description: 400 Bad Request
          content:
            application/json:
              schema: &id050
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id050
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id051
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id051
    post:
      tags:
      - quoteGuestCartItemRepositoryV1
      description: Add/update the specified cart item.
      operationId: PostV1GuestcartsCartIdItems
      parameters:
      - name: cartId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema: &id052
              required:
              - cartItem
              properties:
                cartItem:
                  $ref: '#/components/schemas/quote-data-cart-item-interface'
              type: object
              xml:
                name: request
          application/xml:
            schema: *id052
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id053
                $ref: '#/components/schemas/quote-data-cart-item-interface'
            application/xml:
              schema: *id053
        '400':
          description: 400 Bad Request
          content:
            application/json:
              schema: &id054
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id054
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id055
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id055
  /V1/guest-carts/{cartId}/items/{itemId}:
    put:
      tags:
      - quoteGuestCartItemRepositoryV1
      description: Add/update the specified cart item.
      operationId: PutV1GuestcartsCartIdItemsItemId
      parameters:
      - name: cartId
        in: path
        required: true
        schema:
          type: string
      - name: itemId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema: &id056
              required:
              - cartItem
              properties:
                cartItem:
                  $ref: '#/components/schemas/quote-data-cart-item-interface'
              type: object
              xml:
                name: request
          application/xml:
            schema: *id056
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id057
                $ref: '#/components/schemas/quote-data-cart-item-interface'
            application/xml:
              schema: *id057
        '400':
          description: 400 Bad Request
          content:
            application/json:
              schema: &id058
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id058
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id059
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id059
    delete:
      tags:
      - quoteGuestCartItemRepositoryV1
      description: Remove the specified item from the specified cart.
      operationId: DeleteV1GuestcartsCartIdItemsItemId
      parameters:
      - name: cartId
        in: path
        description: The cart ID.
        required: true
        schema:
          type: string
      - name: itemId
        in: path
        description: The item ID of the item to be removed.
        required: true
        schema:
          type: integer
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id060
                type: boolean
            application/xml:
              schema: *id060
        '400':
          description: 400 Bad Request
          content:
            application/json:
              schema: &id061
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id061
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id062
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id062
  /V1/guest-carts/{cartId}/selected-payment-method:
    get:
      tags:
      - quoteGuestPaymentMethodManagementV1
      description: Return the payment method for a specified shopping cart.
      operationId: GetV1GuestcartsCartIdSelectedpaymentmethod
      parameters:
      - name: cartId
        in: path
        description: The cart ID.
        required: true
        schema:
          type: string
      responses:
        '200':
          description: 200 Success.
          content:
            application/json:
              schema: &id063
                $ref: '#/components/schemas/quote-data-payment-interface'
            application/xml:
              schema: *id063
        '400':
          description: 400 Bad Request
          content:
            application/json:
              schema: &id064
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id064
        default:
          description: Unexpected error
          content:
            application/json:
              schema: &id065
                $ref: '#/components/schemas/error-response'
            application/xml:
              schema: *id065
    put:
      tags:
      - quoteGuestPaymentMethodManagementV1
      description: Add a specified payment method to a specified shopping cart.
      operationId: PutV1GuestcartsCartIdSelectedpaymentmethod
      parameters:
      - name: cartId
        in: path
        description: The cart ID.
        required: true
        schema:
          type: string
      requestBody:
        required: false
        content:
          application/json:
            schema: &id066
              required:
              - method
            

# --- truncated at 32 KB (166 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/modivo/refs/heads/main/openapi/modivo-commerce-rest-api-openapi.yml