# https://spec.openapis.org/oas/latest.html
openapi: "3.0.3"
info:
  title: Michelin North America Order-to-Cash APIs
  description: |
    These APIs will help you to do business transactions with Michelin. 
    <br><br><b>Authentication details:</b><br>
    <br><u>Option A:</u> OAuth2 Client Credentials (recommended)
    <br><u>Option B:</u> API Key + Basic Authentication (deprecated)
    <br><br>To request your access, please contact your representative.
    <br><br>Our services are based on the EDIWHEEL standards.
    <br>You can find more information on the <a href="https://www.ediwheel.com/" target="_blank">EDIWHEEL website</a>.
  version: 1.0.1
  contact:
    name: Michelin Customer Integration Team
servers:
  - url: https://indus.api.michelin.com/
    description: Test server
  - url: https://api.michelin.com/
    description: Production server
tags:
  - name: "Authentication"
    description: "Obtain a token to consume the other APIs"
  - name: "Inventory"
    description: "Inventory Inquiry"
  - name: "Order"
    description: "Order Creation, Order Status"
  - name: "ASN"
    description: "Advance Shipping Notice"
  - name: "Invoice"
    description: "Invoices"
paths:
  /idp/v2/b2b/oauth2/token:
    post:
      tags:
        - Authentication
      summary: Obtain a token to consume the other APIs.
      description: This API will give you a valid authorization token to consume the other APIs.
      requestBody:
        content:
          "application/x-www-form-urlencoded":
            schema:
              $ref: "#/components/schemas/AuthenticationTokenRequest"
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthenticationTokenResponse"
        "400":
          description: Bad Request
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/AuthenticationError"
        "401":
          $ref: "#/components/responses/UnauthorizedError"

  /stock/amn/C1_1/inquiry:
    post:
      tags:
        - Inventory
      summary: Query inventory in real-time
      description: Query inventory in real-time
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EDIWheel-C1_1-StockInquiryRequest"
        required: true
      responses:
        "200":
          description: Inquiry Quoted
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/EDIWheel-C1_1-StockInquiryResponse"
        "400":
          description: Invalid Request
          content:
            application/json:
              schema:
                type: string
                example: {}
        "401":
          description: Unauthorized
          content:
            application/json:
              schema:
                type: string
                example: {}
        "403":
          description: Forbidden
          content:
            application/json:
              schema:
                type: string
                example: {}
        "404":
          description: Not Found
          content:
            "*/*":
              schema:
                type: string
        "408":
          description: Request Timeout
          content:
            "*/*":
              schema:
                type: string
        "415":
          description: Unsupported Media Type
          content:
            "*/*":
              schema:
                type: string
        "429":
          description: Too Many Requests
          content:
            application/json:
              schema:
                type: string
                example: {}
        "500":
          description: Internal Server Error
          content:
            application/json:
              schema:
                type: string
                example: {}
      security:
        - oAuth2ClientCredentials: []
        - basicAuth: []
          apikey: []

  /order/amn/C1_1/status:
    post:
      tags:
        - Order
      summary: Query order status in real-time
      description: Query order status in real-time
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EDIWheel-C1_1-OrderStatusRequest"
        required: true
      responses:
        "200":
          description: Order status query responsed
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/EDIWheel-C1_1-OrderStatusResponse"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
      security:
        - oAuth2ClientCredentials: []
        - basicAuth: []
          apikey: []

  /order/amn/C1_1/create:
    post:
      tags:
        - Order
      summary: Create order in real-time
      description: Create order in real-time
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EDIWheel-C1_1-OrderCreationRequest"
        required: true
      responses:
        "200":
          description: Order Created
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/EDIWheel-C1_1-OrderCreationResponse"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
      security:
        - oAuth2ClientCredentials: []
        - basicAuth: []
          apikey: []

  /desadv/amn/C1_0/desadv:
    post:
      tags:
        - ASN
      summary: Get Advanced Shipping Notice
      description: Get Advanced Shipping Notice
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/EDIWheel-C1_0-DesadvRequest"
            examples:
              Search By Date Range:
                value:
                  documentID: "C1"
                  variant: "0"
                  despatchFromDate: "2025-01-01"
                  despatchToDate: "2025-01-03"
                  buyerParty:
                    partyID: "1111111"
                    agencyCode: "91"
              Search By Date Range and Shipto:
                value:
                  documentID: "C1"
                  variant: "0"
                  despatchFromDate: "2025-01-01"
                  despatchToDate: "2025-01-03"
                  buyerParty:
                    partyID: "1111111"
                    agencyCode: "91"
                  consignee:
                    partyID: "1234567"
                    agencyCode: "91"
              Search By Document ID:
                value:
                  documentID: "C1"
                  variant: "0"
                  buyerParty:
                    partyID: "1111111"
                    agencyCode: "91"
                  References:
                    ReferenceTypeCode: "DQ"
                    DocumentID: "PO12345"
        required: true
      responses:
        "200":
          description: Delivery query responsed
          content:
            application/json:
              schema:
                "$ref": "#/components/schemas/EDIWheel-C1_0-DesadvResponse"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
      security:
        - oAuth2ClientCredentials: []
        - basicAuth: []
          apikey: []
  /invoice/amn/B3_4/invoices:
    post:
      tags:
        - Invoice
      summary: Retrieve invoice and download its PDF format
      description: Retrieve invoice and download its PDF format
      requestBody:
        content:
          "application/json":
            schema:
              $ref: "#/components/schemas/EDIWheel-B3_4-InvoiceListRequest"
      responses:
        "200":
          description: Invoices list responsed
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/EDIWheel-B3_4-InvoiceListResponse"
        "401":
          $ref: "#/components/responses/UnauthorizedError"
      security:
        - oAuth2ClientCredentials: []
        - basicAuth: []
          apikey: []

####
# COMPONENTS
####
components:
  schemas:
    ###
    # DESADV REQUEST
    EDIWheel-C1_0-DesadvRequest:
      type: object
      required:
        - documentID
        - variant
        - buyerParty
      properties:
        documentID:
          type: string
          description: 'Fixed documentID = C1'
          example: "C1"
        variant:
          type: string
          description: 'Fixed variant = 0'
          example: "0"
        despatchFromDate:
          type: string
          description: 'From Date value for Date Range searches. Format YYYY-MM-DD. Date range cannot be used in conjunction with other reference(s) as selection criteria. Max date range within single search = 5 days. Date range OR Reference value required for searches.'
          example: "2025-01-01"
        despatchToDate:
          type: string
          description: 'To Date value for Date Range searches. Format YYYY-MM-DD. Date range cannot be used in conjunction with other reference(s) as selection criteria. Max date range within single search = 5 days. Date range OR Reference value required for searches.'
          example: "2025-01-05"
        references:
          type: object
          properties:
            referenceTypeCode:
              type: string
              description: 'Reference Type Codes available for use are as follows: VN = Michelin Sales Order Number, ON = Customer Purchase Order Number. If used in request, responses will be limited to item(s) with the designated referenceTypeCode. Only one referenceTypeCode can be used per request.'
              enum: ["VN", "ON"]
              example: "ON"
            documentID:
              type: string
              description: 'Corresponding value for above referenceTypeCode (if used). Only one referenceTypeCode documentID can be used per request. Date range OR Reference value required for searches.'
              example: "PO12345"
        buyerParty:
          type: object
          required:
            - partyID
            - agencyCode
          properties:
            partyID:
              type: string
              description: 'Customer Account Michelin Bill To (BT) Number'
              example: "1111111"
            agencyCode:
              type: string
              description: 'Fixed value = 91'
              example: "91"
        consignee:
          type: object
          properties:
            partyID:
              type: string
              description: 'Customer Account Michelin Ship To (ST) Number'
              example: "1234567"
            agencyCode:
              type: string
              description: 'Fixed value = 91'
              example: "91"
    ###
    # DESADV RESPONSE
    EDIWheel-C1_0-DesadvResponse:
      type: object
      required:
        - envelopeHeader
        - errorHead
      properties:
        envelopeHeader:
          type: object
          required:
            - documentID
            - variant
            - messageType
            - numberOfMessages
          properties:
            documentID:
              type: string
              description: 'Fixed documentID = C1'
              example: "C1"
            variant:
              type: string
              description: 'Fixed variant = 0'
              example: "0"
            messageType:
              type: string
              description: 'Fixed messageType = desadv'
              example: "desadv"
            numberOfMessages:
              type: integer
              description: 'Number of ASN messages included in response (could be 0, 1, or >1)'
              example: 1
        errorHead:
          type: object
          required:
            - errorCode
          properties:
            errorCode:
              type: string
              description: |
                Error code if applicable. Error code = 0 indicates no error.
                
                Possible header error codes:
                - 0: No errors occurred. No action required.
                - 1: At least one item is incorrect. Details are distinctive in the error field on item level.
                - 901: Document number invalid (identification number of document, blanket order reference, customer reference, additional customer reference number)
                - 907: Invalid consignee(ship-to) party ID number. Consignee PartyID is missing from requests, or invalid, or is not setup or active within supplier system(s).
                - 915: Buyer (sold-to) party id number invalid. Buyer PartyID is missing or invalid from requests, OR is not setup or active within supplier system(s).
                - 920: Account not activated for this buyer (sold to) party ID number. Account is not in active status for order placement.
                - 987: Date range cannot be used in conjunction with other reference(s) as selection criteria.
                - 999: Miscellaneous header error.
              example: "0"
        desadv:
          type: array
          items:
            type: object
            required:
              - issueDate
              - documentNumber
              - measures
              - despatchDate
              - arrivalDate
              - references
              - buyerParty
              - consignee
              - carrierParty
              - lineLevel
            properties:
              issueDate:
                type: string
                description: 'Issue Date where date format = YYYY-MM-DD'
                example: "2025-01-15"
              documentNumber:
                type: string
                description: 'Michelin Bill of Lading number'
                example: "BOL123456"
              measures:
                type: object
                required:
                  - grossWeight
                properties:
                  grossWeight:
                    type: object
                    required:
                      - measure
                      - measureUnitCode
                    properties:
                      measure:
                        type: number
                        description: 'Total shipment weight in lbs'
                        example: 450.5
                      measureUnitCode:
                        type: string
                        description: 'Fixed measurement unit = lbs'
                        example: "lbs"
              despatchDate:
                type: string
                description: 'Ship Date where date format = YYYY-MM-DD'
                example: "2025-01-16"
              arrivalDate:
                type: string
                description: 'Expected arrival date = YYYY-MM-DD'
                example: "2025-01-18"
              arrivalTime:
                type: string
                example: "14:30:00"
              deliveryOption:
                type: array
                items:
                  type: string
                example: []
              totalQuantity:
                type: object
                required:
                  - quantityValue
                  - measureUnitCode
                properties:
                  quantityValue:
                    type: integer
                    description: 'Total quantity of items included in shipment'
                    example: 12
                  measureUnitCode:
                    type: string
                    description: 'Fixed measurement unit PCE = pieces'
                    example: "PCE"
              references:
                type: array
                items:
                  type: object
                  required:
                    - referenceTypeCode
                    - documentID
                  properties:
                    referenceTypeCode:
                      type: string
                      description: 'DQ = Delivery Note Number'
                      example: "DQ"
                    documentID:
                      type: string
                      description: 'Michelin Bill of Lading number'
                      example: "BOL123456"
              buyerParty:
                type: object
                required:
                  - partyID
                  - agencyCode
                properties:
                  partyID:
                    type: string
                    description: 'Customer Account Michelin Bill To (BT) Number. 7 or 9 digit number'
                    example: "1111111"
                  agencyCode:
                    type: string
                    description: 'Fixed value = 91'
                    example: "91"
              consignee:
                type: object
                required:
                  - partyID
                  - agencyCode
                  - name
                  - address
                properties:
                  partyID:
                    type: string
                    description: 'Customer Account Michelin Ship To (ST) Number. 7 or 9 digit number'
                    example: "1234567"
                  agencyCode:
                    type: string
                    description: 'Fixed value = 91'
                    example: "91"
                  name:
                    type: array
                    items:
                      type: string
                    description: 'Name of Customer Account Michelin Ship To (ST)'
                    example: ["ACME TIRE - MAIN ST LOCATION"]
                  address:
                    type: object
                    required:
                      - street
                      - city
                      - district
                      - postCode
                      - countryCode
                    properties:
                      street:
                        type: array
                        items:
                          type: string
                        description: 'Customer Account Michelin Ship To (ST) street address lines'
                        example: ["456 MAIN ST", "SUITE 100", null]
                      city:
                        type: string
                        description: 'Customer Account Michelin Ship To (ST) City'
                        example: "ANYTOWN"
                      district:
                        type: string
                        description: 'Customer Account Michelin Ship To (ST) State or Province. Format = two character abbreviation'
                        example: "SC"
                      postCode:
                        type: string
                        description: 'Customer Account Michelin Ship To (ST) Zip or Postal Code'
                        example: "12345-6789"
                      countryCode:
                        type: string
                        description: 'Customer Account Michelin Ship To (ST) country code = US or CA'
                        example: "US"
              carrierParty:
                type: object
                required:
                  - partyID
                  - agencyCode
                properties:
                  partyID:
                    type: string
                    description: 'Carrier SCAC code. Up to 4 characters'
                    example: "ABCD"
                  agencyCode:
                    type: string
                    description: '182 = US, standard carrier alpha code'
                    example: "182"
              lineLevel:
                type: array
                items:
                  type: object
                  required:
                    - lineID
                    - references
                    - orderedArticle
                  properties:
                    lineID:
                      type: string
                      description: 'Line ID for ASN items - repeats based on number of lines within shipment'
                      example: "1"
                    references:
                      type: array
                      items:
                        type: object
                        required:
                          - referenceTypeCode
                          - documentID
                        properties:
                          referenceTypeCode:
                            type: string
                            description: 'Reference Type Code: BM = Bill of Lading number, ON = Customer Purchase Order Number, VN = Michelin Sales Order Number, ACC = Shipping unit identification'
                            enum: ["BM", "ON", "VN", "ACC"]
                            example: "BM"
                          documentID:
                            type: string
                            description: 'Document ID corresponding to the reference type code. This could be Michelin Bill of Lading number, Customer Purchase Order Number, Michelin Sales Order Number, or Trailer ID (where present)'
                            example: "BOL123456"
                          lineID:
                            type: string
                            description: 'Line ID within purchase order or sales order'
                            example: "1"
                    orderedArticle:
                      type: object
                      required:
                        - articleIdentification
                        - articleDescription
                        - despatchedQuantity
                      properties:
                        articleIdentification:
                          type: object
                          required:
                            - manufacturersArticleID
                          properties:
                            buyersArticleID:
                              type: string
                              description: 'Customer part number where applicable'
                              example: "321"
                            manufacturersArticleID:
                              type: string
                              description: 'Michelin part number. 5 digit value'
                              example: "62115"
                        articleDescription:
                          type: object
                          required:
                            - articleDescriptionText
                          properties:
                            articleDescriptionText:
                              type: array
                              items:
                                type: string
                              description: 'Description for Michelin part number'
                              example: ["265/70R17 115TDFNDRLTXMSORLMTP"]
                        despatchedQuantity:
                          type: object
                          required:
                            - quantityValue
                            - measureUnitCode
                          properties:
                            quantityValue:
                              type: integer
                              description: 'Quantity of units by line'
                              example: 4
                            measureUnitCode:
                              type: string
                              description: 'Fixed measurement unit PCE = pieces'
                              example: "PCE"
                        deliveryOption:
                          type: array
                          items:
                            type: string
                          example: []
                        tracingInformation:
                          type: array
                          description: 'Tracking number information - repeated at line level. Small package shipments could include multiple tracking numbers repeated at each line level.'
                          items:
                            type: object
                            properties:
                              tracingID:
                                type: string
                                description: 'Tracking number'
                                example: "1Z999AA10123456784"
    
    ###
    # ORDER CREATION REQUEST
    EDIWheel-C1_1-OrderCreationRequest:
      allOf:
        - type: object
          required:
            - documentId
            - customerReference
            - buyerParty
            - supplierParty
          properties:
            documentId:
              type: string
              description: 'Fixed value "C1"'
              example: "C1"
            variant:
              type: string
              description: 'Fixed value "1"'
              example: "1"
            transportPriority:
              type: string
              description: 'REPL = Next Truck <br>
                RUSH = Small Package <br>
                REPL offers could be present from Michelin and/or extended supplier. REPL offer from extended supplier would typically result in a same day or next day delivery.<br>
                REPL offers from Michelin could also include "backorder" offers designated by deliveryDate = 2999-12-31 <br>
                If order is for pickup from supplier DC, this value would be set as null'
            pickUp:
              type: string
              description: 'Indicator = "Y" in order request would indicate customer intends to pick up product from local supplier warehouse. <br>
                If order is for pickup from supplier DC, set value as "Y".<br>
                If order is not for pickup from supplier DC, set value as null and set transportPriority field.'
            deliveryRemarks:
              type: string
            customerReference:
              type: object
              required:
                - documentId
              properties:
                documentId:
                  type: string
                  description: 'Customer PO Number'
                  example: "CUSTOMERPO001"
            supplierParty:
              type: object
              required:
                - agencyCode
                - informationContact
              properties:
                partyId:
                  type: string
                  example: ""
                agencyCode:
                  type: string
                  description: 'Fixed value "91"'
                  example: "91"
                name:
                  type: array
                  items:
                    type: string
                  example: [""]
                address:
                  type: object
                  required:
                    - countryCode
                  properties:
                    street:
                      type: array
                      items:
                        type: string
                      example: [""]
                    city:
                      type: string
                      example: ""
                    district:
                      type: string
                      example: ""
                    postCode:
                      type: string
                      example: ""
                    postBoxCode:
                      type: string
                      example: ""
                    subCountry:
                      type: string
                      example: ""
                    countryCode:
                      type: string
                      enum:
                        - "US"
                        - "CA"
                      example: "US"
                informationContact:
                  type: object
                  required:
                    - name
                  properties:
                    contactId:
                      type: string
                      example: ""
                    name:
                      type: array
                      items:
                        type: string
                      example: ["Michelin"]
                      description: 'This value would equal supplier party name returned in inventory inquiry response where order is to be sent. <br> In this example, request is to supplier = Michelin (to ship from Michelin DC).'
                    telephoneNumber:
                      type: string
                      example: ""
                    telephoneExtension:
                      type: string
                      example: ""
                    faxNumber:
                      type: string
                      example: ""
                    emailAddress:
                      type: string
                      example: ""
            buyerParty:
              type: object
              required:
                - partyId
                - agencyCode
              properties:
                partyId:
                  type: string
                  example: "1111111"
                  description: 'Michelin''s 7-digit Bill To account number associated with the ordering location.'
                agencyCode:
                  type: string
                  example: "91"
                  description: Fixed value "91"
            consignee:
              type: object
              required:
                - partyId
                - agencyCode
              properties:
                partyId:
                  type: string
                  example: "1234567"
                  description: 'Michelin''s 7-digit Ship To account number associated with the ordering location.'
                agencyCode:
                  type: string
                  example: "91"
                  description: 'Fixed value "91"'
            orderLine:
              type: array
              items:
                type: object
                required:
                  - lineId
                  - orderedArticle
                  - additionalCustomerReferenceNumber
                properties:
                  lineId:
                    type: string
                    description: 'Sequential line number id'
                    example: "001"
                  additionalCustomerReferenceNumber:
                    type: object
                    required:
                      - documentId
                    properties:
                      documentId:
                        type: string
                        description: 'Unique transaction reference number for each order request'
                        example: "MXDLRUS-P-EXT0000058"
                  orderedArticle:
                    type: object
                    required:
                      - articleIdentification
                      - requestedDeliveryDate
                      - requestedQuantity
                    properties:
                      articleIdentification:
                        type: object
                        properties:
                          buyersArticleId:
                            type: string
                            description: 'Customer part number (CPN). <br>
                              IF CPN is to be used, a cross reference must exist within the Michelin system between the Michelin part number and the customer part number. <br>
                              If manufacturersArticleId is being used, this value is not required. <br>
                              Max characters allowed = 17.'
                          manufacturersArticleId:
                            type: string
                            description: 'Part number (Michelin 5 digit MSPN).<br> 
                              If buyersArticleId is being used, this value is not required.'
                        oneOf:
                          - title: "ManufacturersArticleId is used"
                            properties:
                              manufacturersArticleId:
                                example: "62115"
                              buyersArticleId:
                                example: ""
                            required: ["manufacturersArticleId"]
                            description: 'Option 1: manufacturersArticleId is used, and buyersArticleId is not required'
                          - title: "BuyersArticleId is used"
                            properties:
                              manufacturersArticleId:
                                example: ""
                              buyersArticleId:
                                example: "321"
                            required: ["buyersArticleId"]
                            description: 'Option 2: buyersArticleId is used, and manufacturersArticleId is not required'
                        additionalProperties: false
                      requestedDeliveryDate:
                        type: string
                        description: 'Requested delivery date format YYYY-MM-DD'
                        example: "2025-01-03"
                      requestedQuantity:
                        type: object
                        required:
                          - quantityValue
                        properties:
                          quantityValue:
                            type: string
                            example: "4"
                            description: 'Requested quantity should be greater than 0 and should not include decimal values'
        - oneOf:
            - title: 'Order is NOT for Pickup from supplier DC'
              properties:
                transportPriority:
                  type: string
                  enum: 
                    - "REPL"
                    - "RUSH"
                  example: "REPL"
                pickUp:
                  type: string
                  example: null
              required: ["transportPriority"]
              description: 'Option 1: transportPriority is REPL or RUSH, and pickUp must be null'
            - title: "Order is for Pickup from supplier DC"
              properties:
                transportPriority:
                  type: string
                  enum: 
                    - 'REPL'
                    - 'RUSH'
                    - null
                  description: 'REPL = Next Truck <br>
                    RUSH = Small Package <br>
                    REPL offers could be present from Michelin and/or extended supplier. REPL offer from extended supplier would typically result in a same day or next day delivery.<br>
                    REPL offers from Michelin could also include "backorder" offers designated by deliveryDate = 2999-12-31 <br>
                    If order is for pickup from supplier DC, this value would be set as null'
                  example: null
                pickUp:
                  type: string
                  enum:
                    - 'Y'
                  example: 'Y'
                  description: 'Indicator = "Y" in order request would indicate customer intends to pick up product from local supplier warehouse. <br>
                    If order is for pickup from supplier DC, set value as "Y".<br>
                    If order is not for pickup from supplier DC, set value as null and set transportPriority field.'
              required: ["pickUp"]
              description: 'Option 2: pickUp is Y, and transportPriority must be null.' 
  
    ###
    # ORDER CREATION RESPONSE
    ###
    EDIWheel-C1_1-OrderCreationResponse:
      type: object
      required:
        - documentId
        - errorHead
        - customerReference
        - buyerParty
      properties:
        documentId:
          type: string
          description: 'DocumentID always "C1".'
          example: "C1"
        variant:
          type: string
          description: 'Variant always "1".'
          example: "1"
        transportPriority:
          type: string
          description: 'Mode of transport indicated in the request. Example: "REPL" for Next Truck.'
          example: "REPL"
        errorHead:
          type: object
          required:
            - errorCode
          properties:
            errorCode:
              type: string
              description: |
                Error code if applicable. Error code = 0 indicates no error.
                
                Possible header error codes:
                - 0: No errors occurred. No action required.
                - 1: At least one item is incorrect. Details are distinctive in the error field on item level.
                - 303: No connection to ERP system. System is unavailable.
                - 405: Timeout during processing in ERP system. System has not responded within the expected time parameter.
                - 901: Document number invalid (identification number of document, blanket order reference, customer reference, additional customer reference number)
                - 906: Duplicate PO. Customer settings prevent duplicate PO for Michelin DC orders
                - 907: Invalid consignee(ship-to) party ID number. Consignee PartyID is missing from requests, or invalid, or is not setup or active within supplier system(s).
                - 909: Invalid purchase order number. Invalid purchase order number format included in order request (where customer requires PO)
                - 915: Buyer (sold-to) party id number invalid. Buyer PartyID is missing or invalid from requests, OR is not setup or active within supplier system(s).
                - 920: Account not activated for this buyer (sold to) party ID number. Account is not in active status for order placement.
                - 925: Invalid Supplier Party ID. Supplier Party ID included in request is invalid.
                - 942: Min Max Qty Error Validation. Customer quantity setting for order exceeded.
                - 943: Unable to generate sales order number. Michelin order management system is unable to generate sales order number. Please contact Michelin customer service for further assistance.
                - 950: Distributor Order Not Allowed. Order request not allowed to designated supplier
                - 999: Miscellaneous header error.
              example: "0"
        customerReference:
          type: object
          required:
            - documentId
          properties:
            documentId:
              type: string
              description: 'Customer PO number.'
              example: "TEST-DO NOT SHIP"
        supplierParty:
          type: object
          required:
            - partyId
            - agencyCode
          properties:
            partyId:
              type: string
              description: 'Supplier location indicator (e.g., U71 Michelin DC).'
              example: "U71"
            agencyCode:
              type: string
              description: 'AgencyCode always "91".'
              example: "91"
            name:
              type: array
              items:
                type: string
              description: 'Supplier location name.'
              example: ["MTC LAURENS"]
            address:
              type: object
              required:
                - countryCode
              properties:
                street:
                  type: array
                  items:
                    type: string
                  description: 'Supplier location street address.'
                  example: ["101 MICHELIN DR"]
                city:
                  type: string
                  description: 'Supplier location city.'
                  example: "LAURENS"
                postCode:
                  type: string
                  description: 'Supplier location postal code.'
                  example: "29360"
                subCountry:
                  type: string
                  description: 'Supplier location state.'
                  example: "SC"
                countryCode:
                  type: string
                  description: 'Supplier location country.'
                  example: "US"
            informationContact:
              type: object
              properties:
                name:
                  type: array
                  items:
                    type: string
                  description: 'Supplier ID (e.g., this particular offer available from Michelin DC).'
                  example: ["Michelin"]
                telephoneNumber:
                  type: string
                  description: 'Supplier DC contact information (where applicable).'
                  example: "Main:8646827800"
        buyerParty:
          type: object
          required:
            - partyId
            - agencyCode
          properties:
            partyId:
              type: string
              description: 'Michelin Bill To number for customer account.'
              example: "1111111"
            agencyCode:
              type: string
              description: 'AgencyCode always "91".'
              example: "91"
        consignee:
          type: object
          required:
            - partyId
            - agencyCode
          properties:
            partyId:
              type: string
              description: 'Michelin Ship To number for customer ordering location.'
              example: "1234567"
            agencyCode:
              type: string
              description: 'AgencyCode always "91".'
              example: "91"
        currencyCode:
          type: string
          description: 'CurrencyCode = USD or CAD.'
          example: "USD"
        orderLine:
          type: array
          items:
            type: object
            required:
              - lineId
              - orderedArticle
            properties:
              lineId:
                type: string
                description: 'Sequential line number ID.'
                example: "001"
              suppliersOrderLineId:
                type: string
                description: 'Sequential Suppliers Order LineID reference.'
                example: "001"
              additionalCustomerReferenceNumber:
                type: object
                required:
                  - documentId
                properties:
                  documentId:
                    type: string
                    description: 'Unique transaction reference number for each order request.'
                    example: "MXDLRUS-P-EXT0000058"
              orderedArticle:
                type: object
                required:
                  - articleIdentification
                  - requestedDeliveryDate
                  - orderedQuantity
                properties:
                  articleIdentification:
                    type: object
                    properties:
                      buyersArticleId:
                        type: string
                        description: 'Customer part number (CPN) if used.'
                        example: ""
                      manufacturersArticleId:
                        type: string
                        description: 'Part number (Michelin 5 digit MSPN).'
                        example: "62115"
                  articleDescription:
                    type: object
                    properties:
                      articleDescriptionText:
                        type: string
                        description: 'Product description.'
                        example: "265/70R17 115TDFNDRLTXMSORLMTP"
                  requestedDeliveryDate:
                    type: string
                    description: 'Requested delivery date format YYYY-MM-DD.'
                    example: "2025-01-03"
                  orderReference:
                    type: object
                    properties:
                      documentId:
                        type: string
                        description: 'Supplier order confirmation number.'
                        example: "SNZ900209"
                  error:
                    type: object
                    properties:
                      errorCode:
                        type: string
                        description: |
                          Line error indicator.
                          
                          Possible line error codes:
                          - 0: No errors occurred. No action required.
                          - 903: Invalid article identification code. Article identification code used is invalid or inactive.
                          - 904: Invalid requested quantity. Requested quantity is 0.
                          - 919: No authority for brand/sales organization. Product is not authorized for customer to purchase.
                          - 931: Customer price not found or Invalid Marketing Status. Pricing is not established for products or Product not available for purchase.
                          - 934/935: Customer not allowed to create back order. Backorder not allowed for product on order.
                          - 945: MSPN on Hold. Product status is not eligible for ordering.
                          - 947: Invalid requested date. Invalid or missing requested delivery date.
                          - 999: Miscellaneous line error.
                        example: "0"
                      errorText:
                        type: string
                        description: 'Line error text.'
                        example: "NO_ERROR"
                  scheduleDetails:
                    type: array
                    items:
                      type: object
                      properties:
                        deliveryDate:
                          type: string
                          description: 'Expected delivery date.'
                          example: "2025-01-05"
                        confirmedQuantity:
                          type: object
                          properties:
                            quantityValue:
                              type: string
                              description: 'Confirmed quantity available.'
                              example: "4"
                        priceDetails:
                          type: object
                          properties:
                            netUnitPrice:
                              type: object
                              properties:
                                priceAmount:
                                  type: string
                                  description: 'Product invoice price.'
                                  example: "163.2"
                        charge:
                          type: array
                          items:
                            type: object
                            properties:
                              chargeCategory:
                                type: string
                                description: 'Charge category (e.g., FET for Federal Excise Tax).'
                                example: "FET"
                              chargeAmount:
                                type: object
                                properties:
                                  amountValue:
                                    type: string
                                    description: 'Charge amount (where applicable).'
                                    example: "0.00"
                  orderedQuantity:
                    type: object
                    properties:
                      quantityValue:
                        type: string
                        description: 'Ordered quantity for the line.'
                        example: "4"
      

    ###
    # ORDER STATUS REQUEST
    ###
    EDIWheel-C1_1-OrderStatusRequest:
      type: object
      required:
        - documentID
        - variant
        - orderStatusIndicator
        - buyerParty
        - consignee
      properties:
        documentID:
          type: string
          description: 'Fixed documentID = C1'
          example: "C1"
        variant:
          type: string
          description: 'Fixed variant = 1'
          example: "1"
        orderStatusIndicator:
          type: string
          description: 'Indicator used in request determines line statuses that are included in response. Indicator options: 0 = open/backorder status lines, 1 = open/backorder and cancelled status lines, 2 = all status lines.'
          enum: ["0", "1", "2"]
          example: "2"
        orderDateFrom:
          type: string
          description: 'From Date value for Date Range searches. Format YYYY-MM-DD. Date range cannot be used in conjunction with order reference(s) as selection criteria. Max of 90 day window. Date range OR Reference value required for searches.'
          example: "2025-01-01"
        orderDateTo:
          type: string
          description: 'To Date value for Date Range searches. Format YYYY-MM-DD. Date range cannot be used in conjunction with order reference(s) as selection criteria. Max of 90 day window. Date range OR Reference value required for searches.'
          example: "2025-03-31"
        buyerParty:
          type: object
          required:
            - partyID
            - agencyCode
          properties:
            partyID:
              type: string
              description: 'Customer Account Michelin Bill To (BT) Number. Michelin assigned billing account number for customer. All numeric value. Typically will be a 7 or 9 digit number.'
              example: "1111111"
            agencyCode:
              type: string
              description: 'Fixed value = 91'
              example: "91"
        consignee:
          type: object
          required:
            - partyID
            - agencyCode
          properties:
            partyID:
              type: string
              description: 'Customer Account Michelin Ship To (ST) Number. Michelin assigned account number for customer receiving location. All numeric value. Typically will be a 7 or 9 digit number.'
              example: "1234567"
            agencyCode:
              type: string
              description: 'Fixed value = 91'
              example: "91"
        referencedOrder:
          type: array
          description: 'referencedOrder / documentID search criteria cannot be used in combination with the date range search. Date range OR Reference value required for searches.'
          items:
            type: object
            properties:
              supplierOrderNumber:
                type: object
                properties:
                  documentID:
                    type: string
                    description: 'Michelin Sales Order Number. Numeric or combination of alpha+numeric. Cannot be used in combination with date range search.'
                    example: "SO12345678"
              orderReference:
                type: object
                properties:
                  documentID:
                    type: string
                    description: 'Customer Purchase Order Number. Cannot be used in combination with date range search.'
                    example: "PO12345"
              orderedArticle:
                type: object
                properties:
                  articleIdentification:
                    type: object
                    properties:
                      manufacturersArticleID:
                        type: string
                        description: 'Michelin part number of product. 5 digit code.'
                        example: "62115"
                      buyersArticleID:
                        type: string
                        description: 'Customer part number of product (where applicable). Customer part number associations must exist in Michelin system for this to be applicable.'
                        example: "321"
                        
    ###
    # ORDER STATUS RESPONSE
    ###
    EDIWheel-C1_1-OrderStatusResponse:
      type: object
      required:
        - documentID
        - orderStatusIndicator
        - errorHead
        - buyerParty
        - consignee
      properties:
        documentID:
          type: string
          description: 'Fixed documentID = C1'
          example: "C1"
        variant:
          type: string
          description: 'Fixed variant = 1'
          example: "1"
        orderDateFrom:
          type: string
          description: 'orderDateFrom returned IF included in request'
          example: "2025-01-01" 
        orderDateTo:
          type: string
          description: 'orderDateTo returned IF included in request'
          example: "2025-03-31"
        orderStatusIndicator:
          type: string
          description: 'Indicator used in request determines line statuses that are included in response'
          enum: ["0", "1", "2"]
          example: "2"
        errorHead:
          type: object
          required:
            - errorCode
          properties:
            errorCode:
              type: string
              description: |
                Error code if applicable. Error code = 0 indicates no error.
                
                Possible header error codes:
                - 0: No errors occurred. No action required.
                - 1: At least one item is incorrect. Details are distinctive in the error field on item level.
                - 901: Document number invalid (identification number of document, blanket order reference, customer reference, additional customer reference number)
                - 907: Invalid consignee(ship-to) party ID number. Consignee PartyID is missing from requests, or invalid, or is not setup or active within supplier system(s).
                - 915: Buyer (sold-to) party id number invalid. Buyer PartyID is missing or invalid from requests, OR is not setup or active within supplier system(s).
                - 920: Account not activated for this buyer (sold to) party ID number. Account is not in active status for order placement.
                - 987: Date range cannot be used in conjunction with other reference(s) as selection criteria.
                - 999: Miscellaneous header error.
              example: "0"
        buyerParty:
          type: object
          required:
            - partyID
            - agencyCode
          properties:
            partyID:
              type: string
              description: 'Michelin assigned billing account number for customer returned from request'
              example: "1111111"
            agencyCode:
              type: string
              description: 'Fixed value = 91'
              example: "91"
            name:
              type: array
              items:
                type: string
              example: []
            address:
              type: object
              nullable: true
            informationContact:
              type: object
              nullable: true
        orderingParty:
          type: object
          nullable: true
        consignee:
          type: object
          required:
            - partyID
            - agencyCode
          properties:
            partyId:
              type: string
              description: 'Michelin assigned account number for customer receiving location returned from request'
              example: "1234567"
            agencyCode:
              type: string
              description: 'Fixed value = 91'
              example: "91"
            name:
              type: array
              items:
                type: string
              example: []
            address:
              type: object
              nullable: true
            informationContact:
              type: object
              nullable: true
        referencedOrder:
          type: array
          items:
            type: object
            required:
              - orderDate
              - supplierOrderNumber
              - orderingMethod
              - orderReference
              - orderLine
            properties:
              error:
                type: object
                nullable: true
              orderDate:
                type: string
                description: 'Date order received in Michelin systems. Format YYYY-MM-DD'
                example: "2025-01-15"
              supplierOrderNumber:
                type: object
                required:
                  - documentId
                properties:
                  documentId:
                    type: string
                    description: 'Michelin sales order number'
                    example: "SO12345678"
              orderingMethod:
                type: string
                description: 'Method by which order was received. Possible responses could include: CSR KEYED, INTERNET, EDI PO, TELEPHONY, VMI, ERPEBIB, S2S INTEGRATION'
                example: "EDI PO"
              orderReference:
                type: object
                required:
                  - documentId
                properties:
                  documentId:
                    type: string
                    description: 'Customer purchase order number (PO) - If PO used by customer'
                    example: "PO12345"
              pickUp:
                type: string
                nullable: true
              deliveryOption:
                type: string
                nullable: true
              sellerParty:
                type: object
                nullable: true
              supplierParty:
                type: object
                nullable: true
              contract:
                type: object
                nullable: true
              orderLine:
                type: array
                items:
                  type: object
                  required:
                    - lineId
                    - orderedArticle
                    - orderedQuantity
                  properties:
                    lineId:
                      type: string
                      description: 'Michelin sales order line number'
                      example: "001"
                    customerLineItemNumber:
                      type: string
                      example: ""
                    additionalCustomerReferenceNumber:
                      type: object
                      nullable: true
                      description: 'Not used today'
                    orderedArticle:
                      type: object
                      required:
                        - articleIdentification
                        - articleDescription
                        - requestedDeliveryDate
                        - scheduleDetails
                      properties:
                        articleIdentification:
                          type: object
                          properties:
                            buyersArticleId:
                              type: string
                              description: 'Customer part number of product (where applicable)'
                              example: "321"
                            manufacturersArticleId:
                              type: string
                              description: 'Michelin part number of product (5 digit value)'
                              example: "62115"
                            eanuccarticleID:
                              type: string
                              nullable: true
                        articleDescription:
                          type: object
                          required:
                            - articleDescriptionText
                          properties:
                            articleDescriptionText:
                              type: string
                              description: 'Product description'
                              example: "265/70R17 115TDFNDRLTXMSORLMTP"
                        requestedDeliveryDate:
                          type: string
                          description: 'Original requested delivery date based on order creation'
                          example: "2025-01-20"
                        requestedDeliveryTime:
                          type: string
                          nullable: true
                          description: 'Not used today'
                        articleComment:
                          type: string
                          nullable: true
                          description: 'Not used today'
                        scheduleDetails:
                          type: array
                          description: 'Multiple scheduleDetails can be present within a single lineID with same or varying status quantityValue'
                          items:
                            type: object
                            required:
                              - deliveryDate
                            properties:
                              deliveryDate:
                                type: string
                                description: 'Expected delivery date (where available). Dates of 9999-09-09 or 9999-12-31 would indicate NO Scheduled Delivery Date currently available for open and backordered quantities.'
                                example: "2025-01-20"
                              deliveryTime:
                                type: string
                                example: "00:00:00Z"
                              confirmedQuantity:
                                type: object
                                nullable: true
                                description: 'Reflects null if not applicable. Displayed if product is currently committed to order'
                                properties:
                                  quantityValue:
                                    type: string
                                    example: "2"
                              backorderedQuantity:
                                type: object
                                nullable: true
                                description: 'Reflects null if not applicable. Displayed if product is currently considered in backorder state'
                                properties:
                                  quantityValue:
                                    type: string
                                    example: "2"
                              cancelledQuantity:
                                type: object
                                nullable: true
                                description: 'Reflects null if not applicable. Displayed is product is currently in cancelled state'
                                properties:
                                  quantityValue:
                                    type: string
                                    example: "0"
                              scheduledQuantity:
                                type: object
                                nullable: true
                                description: 'Reflects null if not applicable. Displayed if product is currently in scheduled state'
                                properties:
                                  quantityValue:
                                    type: string
                                    example: "2"
                              openQuantity:
                                type: object
                                nullable: true
                                description: 'Reflects null if not applicable. Displayed if product is currently in open status'
                                properties:
                                  quantityValue:
                                    type: string
                                    example: "0"
                              shippedDetails:
                                type: object
                                nullable: true
                                description: 'Reflects null if not applicable'
                                properties:
                                  shippedQuantity:
                                    type: object
                                    description: 'Displayed if product is in shipped status'
                                    properties:
                                      quantityValue:
                                        type: string
                                        description: 'Displayed if product has been shipped'
                                        example: "2"
                                  despatchedDetails:
                                    type: object
                                    description: 'Displayed if product has been shipped'
                                    properties:
                                      scheduledArticleDespatchDetails:
                                        type: array
                                        description: 'Displayed if product has been shipped'
                                        items:
                                          type: object
                                          properties:
                                            despatchDate:
                                              type: string
                                              description: 'Planned ship date if product is shipped'
                                              example: "2025-01-18"
                                            despatchAdviceReference:
                                              type: object
                                              properties:
                                                documentId:
                                                  type: string
                                                  description: 'Bill of Lading reference if product is shipped'
                                                  example: "BOL123456"
                                                lineId:
                                                  type: string
                                                  example: "1"
                                            despatchedQuantity:
                                              type: object
                                              properties:
                                                quantityValue:
                                                  type: string
                                                  description: 'Displayed if product has been shipped'
                                                  example: "2"
                        orderedQuantity:
                          type: object
                          required:
                            - quantityValue
                          properties:
                            quantityValue:
                              type: string
                              description: 'Total quantity ordered for line'
                              example: "4"

    ###
    # INVOICE REQUESTS SCHEMAS
    ###
    EDIWheel-B3_4-InvoiceListRequest:
      type: object
      required:
        - documentID
        - invoice
      properties:
        documentID:
          type: string
          description: 'Fixed documentID = B3'
          example: "B3"
        variant:
          type: string
          description: 'Fixed variant = 4'
          example: "4"
        invoice:
          type: array
          items:
            type: object
            required:
              - buyerParty
              - attachment
            properties:
              invoiceIssueFromDate:
                type: string
                description: 'From Date value for Date Range searches. Format YYYY-MM-DD. Date range cannot be used in conjunction with other reference(s) as selection criteria. Date range OR references would need to be included in request. Max date range = 30 days. Depending on volume of activity, smaller range searches are recommended.'
                example: "2025-01-01"
              invoiceIssueToDate:
                type: string
                description: 'To Date value for Date Range searches. Format YYYY-MM-DD. Date range cannot be used in conjunction with other reference(s) as selection criteria. Date range OR references would need to be included in request. Max date range = 30 days. Depending on volume of activity, smaller range searches are recommended.'
                example: "2025-01-31"
              documentTypeCode:
                type: string
                description: 'Document Type Codes available for use are as follows: 380 = commercial invoice, 381 = credit note, 383 = debit note. If used in request, responses will be limited to items with the designated documentTypeCode.'
                enum: ["380", "381", "383"]
                example: "380"
              buyerParty:
                type: object
                required:
                  - partyID
                  - agencyCode
                properties:
                  partyID:
                    type: string
                    description: 'Customer Account Michelin Bill To (BT) Number. Michelin assigned Bill To number for customer. This is a 7 or 9 digit number.'
                    example: "1111111"
                  agencyCode:
                    type: string
                    description: 'Fixed value = 91'
                    example: "91"
              consignee:
                type: object
                properties:
                  partyID:
                    type: string
                    description: 'Customer Account Michelin Ship To (ST) Number. Michelin assigned Ship To number for customer receiving location. This is a 7 or 9 digit number.'
                    example: "1234567"
                  agencyCode:
                    type: string
                    description: 'Fixed value = 91'
                    example: "91"
              references:
                type: object
                description: 'Only one references object is allowed. If a reference is used, the from date and to date should not be used. Date range OR references would need to be included in request.'
                properties:
                  referenceTypeCode:
                    type: string
                    description: 'Reference Type Codes available for use are as follows: DQ = Michelin Bill of Lading Number (BOL), IV = Document Number, ON = Customer Purchase Order (PO) Number, VN = Order Reference Number. If used in request, responses will be limited to document(s) with the designated referenceTypeCode. Only one referenceTypeCode can be used per request.'
                    enum: ["DQ", "IV", "ON", "VN"]
                    example: "ON"
                  documentID:
                    type: string
                    description: 'Corresponding value for above referenceTypeCode (if used). Only one reference documentID can be used per request.'
                    example: "PO12345"
              attachment:
                type: string
                description: 'Attachment dictates response details to include as follows: "1" = data only, "2" = data + PDF base64 details, "3" = PDF base64 details only'
                enum: ["1", "2", "3"]
                example: "1"

    ###
    # INVOICE RESPONSES SCHEMAS
    ###
    EDIWheel-B3_4-InvoiceListResponse:
      type: object
      required:
        - documentID
        - variant
        - numberOfMessages
        - invoice
      properties:
        documentID:
          type: string
          description: 'Fixed documentID = B3'
          example: "B3"
        variant:
          type: string
          description: 'Fixed variant = 4'
          example: "4"
        numberOfMessages:
          type: integer
          description: 'Number of messages returned based on request search criteria. Max response = 100 messages. This may include a pagination feature in the future to be able to include more messages.'
          example: 5
        errorHead:
          type: object
          properties:
            errorCode:
              type: string
              description: |
                Error code if applicable. Error code = 0 indicates no error.
                
                Possible header error codes:
                - 0: No errors occurred. No action required.
                - 1: At least one item is incorrect. Details are distinctive in the error field on item level.
                - 907: Invalid consignee(ship-to) party ID number. Consignee PartyID is missing from requests, or invalid, or is not setup or active within supplier system(s).
                - 915: Buyer (sold-to) party id number invalid. Buyer PartyID is missing or invalid from requests, OR is not setup or active within supplier system(s).
                - 987: Date range cannot be used in conjunction with other reference(s) as selection criteria.
                - 999: Miscellaneous header error.
              example: "0"
        invoice:
          type: array
          items:
            type: object
            required:
              - issueDate
              - documentNumber
              - documentTypeCode
              - documentCurrency
              - buyerParty
              - summary
            properties:
              issueDate:
                type: string
                description: 'Invoice Transaction Date in format YYYY-MM-DD'
                example: "2025-01-03"
              documentNumber:
                type: string
                description: 'Invoice, Credit or Debit Number. Format = 12 numeric digits. Original delivery invoice prefix = 1, Debit memo (3rd party transactions) prefix = 1, Correction or Debit prefix = 5, Correction or Credit prefix = 3.'
                example: "123456789012"
              documentTypeCode:
                type: string
                description: 'Document Type Code used in request. Document Type Code descriptions: 380 = commercial invoice, 381 = credit note, 383 = debit note.'
                example: "380"
              documentCurrency:
                type: string
                description: 'Invoice currency designation. Format = three alpha characters: USD (for US Dollar) or CAD (for Canadian Dollar).'
                example: "USD"
              references:
                type: object
                properties:
                  supplierClaimNumber:
                    type: object
                    properties:
                      documentID:
                        type: string
                        example: ""
                  fleetReference:
                    type: array
                    items:
                      type: object
                      properties:
                        referenceTypeCode:
                          type: string
                          example: ""
                        documentID:
                          type: string
                          example: ""
              allowanceOrCharge:
                type: array
                items:
                  type: object
                  properties:
                    allowanceOrChargeTypeCode:
                      type: string
                      description: 'Allowance or charge type code. Example: Freight Charge (FC) = total freight costs for shipments from Michelin DC.'
                      example: "FC"
                    allowanceOrChargeAmount:
                      type: object
                      properties:
                        amountValue:
                          type: number
                          description: 'Total Freight Charge amount.'
                          example: 25.00
              buyerParty:
                type: object
                required:
                  - partyID
                  - agencyCode
                properties:
                  partyID:
                    type: string
                    description: 'Customer Account Michelin Bill To (BT) Number. Michelin assigned Bill To number for customer account. This is a 7 or 9 digit number.'
                    example: "1111111"
                  agencyCode:
                    type: string
                    description: 'Fixed value = 91'
                    example: "91"
                  name:
                    type: array
                    items:
                      type: string
                    description: 'Customer Account Michelin Bill To (BT) Name.'
                    example: ["ACME TIRE COMPANY"]
                  address:
                    type: object
                    required:
                      - countryCode
                    properties:
                      street:
                        type: array
                        items:
                          type: string
                        description: 'Customer Account Michelin Bill To (BT) Street Address. Street address lines - 3 lines.'
                        example: ["123 MAIN ST", null, null]
                      city:
                        type: string
                        description: 'Customer Account Michelin Bill To (BT) City.'
                        example: "ANYTOWN"
                      district:
                        type: string
                        description: 'Customer Account Michelin Bill To (BT) District.'
                        example: ""
                      postCode:
                        type: string
                        description: 'Customer Account Michelin Bill To (BT) Postal Code. Format allows for #####-####.'
                        example: "12345-6789"
                      subCountry:
                        type: string
                        description: 'Customer Account Michelin Bill To (BT) State Abbreviation. Two character state abbreviation.'
                        example: "SC"
                      countryCode:
                        type: string
                        description: 'Customer Account Michelin Bill To (BT) Country. Two character country code = US or CA.'
                        example: "US"
                  taxRegistrationID:
                    type: string
                    description: 'Customer Tax Payer ID. Example: ##-###-####.'
                    example: "12-345-6789"
                  vatRegistrationID:
                    type: string
                    example: ""
              invoiceIssuerParty:
                type: object
                required:
                  - partyID
                  - agencyCode
                properties:
                  partyID:
                    type: string
                    description: 'Michelin Legal Entity PartyID. Number internal to Michelin.'
                    example: "9876543"
                  agencyCode:
                    type: string
                    description: 'Fixed value = 91'
                    example: "91"
                  name:
                    type: array
                    items:
                      type: string
                    description: 'Michelin Legal Entity Name.'
                    example: ["MICHELIN NORTH AMERICA, INC."]
                  address:
                    type: object
                    required:
                      - countryCode
                    properties:
                      street:
                        type: array
                        items:
                          type: string
                        description: 'Michelin Legal Entity Street Address. Street address lines - 3 lines.'
                        example: ["ONE PARKWAY SOUTH", null, null]
                      city:
                        type: string
                        description: 'Michelin Legal Entity City.'
                        example: "GREENVILLE"
                      district:
                        type: string
                        description: 'Michelin Legal Entity District.'
                        example: ""
                      postCode:
                        type: string
                        description: 'Michelin Legal Entity Postal Code. Format allows for #####-####.'
                        example: "29615"
                      subCountry:
                        type: string
                        description: 'Michelin Legal Entity State Abbreviation. Two character state abbreviation.'
                        example: "SC"
                      countryCode:
                        type: string
                        description: 'Michelin Legal Entity Country. Two character country code = US or CA.'
                        example: "US"
              consignee:
                type: object
                properties:
                  partyID:
                    type: string
                    description: 'Customer Account Michelin Ship To (ST) Number. Michelin assigned Ship To number for customer receiving location. This is a 7 or 9 digit number.'
                    example: "1234567"
                  agencyCode:
                    type: string
                    description: 'Fixed value = 91'
                    example: "91"
                  name:
                    type: array
                    items:
                      type: string
                    description: 'Customer Account Michelin Ship To (ST) Name.'
                    example: ["ACME TIRE - MAIN ST LOCATION"]
                  address:
                    type: object
                    required:
                      - countryCode
                    properties:
                      street:
                        type: array
                        items:
                          type: string
                        description: 'Customer Account Michelin Ship To (ST) Street Address. Street address lines - 3 lines.'
                        example: ["456 MAIN ST", null, null]
                      city:
                        type: string
                        description: 'Customer Account Michelin Ship To (ST) City.'
                        example: "ANYTOWN"
                      district:
                        type: string
                        description: 'Customer Account Michelin Ship To (ST) District.'
                        example: ""
                      postCode:
                        type: string
                        description: 'Customer Account Michelin Ship To (ST) Postal Code. Format allows for #####-####.'
                        example: "12345-6789"
                      subCountry:
                        type: string
                        description: 'Customer Account Michelin Ship To (ST) State Abbreviation. Two character state abbreviation.'
                        example: "SC"
                      countryCode:
                        type: string
                        description: 'Customer Account Michelin Ship To (ST) Country. Two character country code = US or CA.'
                        example: "US"
              sellerParty:
                type: object
                required:
                  - partyID
                  - agencyCode
                properties:
                  partyID:
                    type: string
                    description: 'Michelin Seller Account PartyID. Number internal to Michelin. This is same as Michelin Remit To.'
                    example: "7654321"
                  agencyCode:
                    type: string
                    description: 'Fixed value = 91'
                    example: "91"
                  name:
                    type: array
                    items:
                      type: string
                    description: 'Michelin Seller Account Name.'
                    example: ["MICHELIN NORTH AMERICA, INC."]
                  address:
                    type: object
                    required:
                      - countryCode
                    properties:
                      street:
                        type: array
                        items:
                          type: string
                        description: 'Michelin Seller Account Street Address. Street address lines - 3 lines.'
                        example: ["P.O. BOX 100512", null, null]
                      city:
                        type: string
                        description: 'Michelin Seller Account City.'
                        example: "ATLANTA"
                      district:
                        type: string
                        description: 'Michelin Seller Account District.'
                        example: ""
                      postCode:
                        type: string
                        description: 'Michelin Seller Account Postal Code. Format allows for #####-####.'
                        example: "30384-0512"
                      subCountry:
                        type: string
                        description: 'Michelin Seller Account State Abbreviation. Two character state abbreviation.'
                        example: "GA"
                      countryCode:
                        type: string
                        description: 'Michelin Seller Account Country. US or CA.'
                        example: "US"
                  informationContact:
                    type: object
                    properties:
                      contactID:
                        type: string
                        example: ""
                      name:
                        type: string
                        example: ""
                      telephoneNumber:
                        type: string
                        example: ""
                      telephoneExtension:
                        type: string
                        example: ""
                      faxNumber:
                        type: string
                        example: ""
                      emailAddress:
                        type: string
                        example: ""
                  supplierParty:
                    type: object
                    properties:
                      partyID:
                        type: string
                        example: ""
                      agencyCode:
                        type: string
                        example: ""
                      shippingLocation:
                        type: object
                        properties:
                          locationName:
                            type: string
                            example: ""
                      telephoneExtension:
                        type: string
                        example: ""
              paymentTerms:
                type: array
                items:
                  type: object
                  required:
                    - paymentNet
                  properties:
                    paymentNet:
                      type: array
                      items:
                        type: object
                        properties:
                          paymentDueDate:
                            type: string
                            description: 'Invoice Payment Due Date. Payment due date could be one or multiple. Format YYYY-MM-DD.'
                            example: "2025-02-15"
                          instalmentAmount:
                            type: object
                            properties:
                              amountValue:
                                type: number
                                description: 'Amount due on designated Payment Due Date. Payment due amount could be one or multiple. Amounts could reflect as debit or credit values.'
                                example: 1500.00
                              currencyCode:
                                type: string
                                description: 'Invoice Currency designation. USD (for US Dollar) or CAD (for Canadian Dollar).'
                                example: "USD"
                    paymentDiscount:
                      type: array
                      items:
                        type: object
                        example: []
              headerNote:
                type: object
                properties:
                  languageCode:
                    type: string
                    description: 'Language code. Two character value. Example: EN for English.'
                    example: "EN"
                  note:
                    type: array
                    items:
                      type: string
                    description: 'Actual text note comments where applicable.'
                    example: ["This is a note on the invoice header."]
              lineLevel:
                type: array
                items:
                  type: object
                  required:
                    - lineID
                    - lineItemNetAmount
                    - article
                  properties:
                    lineID:
                      type: string
                      description: 'Invoice Line Number. NOTE: Line IDs are not always sequential.'
                      example: "1"
                    references:
                      type: object
                      properties:
                        deliveryNoteReference:
                          type: object
                          properties:
                            documentID:
                              type: string
                              description: 'Bill of Lading Number.'
                              example: "BOL123456"
                            issueDate:
                              type: string
                              description: 'Date of BOL. Format YYYY-MM-DD.'
                              example: "2025-01-10"
                            completionDate:
                              type: string
                              example: "2025-01-12"
                        suppliersOrderReference:
                          type: object
                          properties:
                            documentID:
                              type: string
                              description: 'Supplier Order Reference Number.'
                              example: "SO987654"
                            lineID:
                              type: string
                              description: 'This is currently referencing internal line numbers and may not reflect customer line numbers.'
                              example: "1"
                            issueDate:
                              type: string
                              description: 'Order Date. Format YYYY-MM-DD.'
                              example: "2025-01-05"
                        associatedInvoiceReference:
                          type: object
                          properties:
                            documentID:
                              type: string
                              description: 'Original Document Number, where present.'
                              example: "INV123456789"
                            lineID:
                              type: string
                              description: 'This is currently referencing internal line numbers and may not reflect customer line numbers.'
                              example: "1"
                            issueDate:
                              type: string
                              description: 'Date of original document. Format YYYY-MM-DD.'
                              example: "2025-01-02"
                        buyerOrderReference:
                          type: object
                          properties:
                            documentID:
                              type: string
                              description: 'Customer Purchase Order Number.'
                              example: "PO12345"
                            lineID:
                              type: string
                              description: 'This is currently referencing internal line numbers and may not reflect customer line numbers.'
                              example: "1"
                        returnDeliveryNoticeReference:
                          type: object
                          properties:
                            documentID:
                              type: string
                              example: ""
                        customsDeclarationNumber:
                          type: array
                          items:
                            type: object
                            properties:
                              documentID:
                                type: string
                                example: ""
                        fleetReference:
                          type: array
                          items:
                            type: object
                            properties:
                              referenceTypeCode:
                                type: string
                                example: ""
                              documentID:
                                type: string
                                example: ""
                    lineItemNetAmount:
                      type: object
                      properties:
                        amountValue:
                          type: number
                          description: 'Total Net Amount by Line ID. Amounts could reflect as debit or credit values depending on transaction.'
                          example: 652.80
                    article:
                      type: object
                      required:
                        - articleIdentification
                        - articleDescription
                        - priceDetails
                      properties:
                        articleIdentification:
                          type: object
                          properties:
                            buyersArticleID:
                              type: string
                              description: 'Customer Part Number. Only applicable if existing within Michelin systems.'
                              example: "321"
                            suppliersArticleID:
                              type: string
                              description: 'Michelin Part Number (MSPN).'
                              example: "62115"
                            eanUccArticleID:
                              type: string
                              example: ""
                        articleDescription:
                          type: array
                          items:
                            type: object
                            required:
                              - articleDescriptionText
                            properties:
                              articleDescriptionText:
                                type: string
                                description: 'Michelin description of part number.'
                                example: "265/70R17 115TDFNDRLTXMSORLMTP"
                        invoicedQuantity:
                          type: object
                          required:
                            - quantityValue
                            - measureUnitCode
                          properties:
                            quantityValue:
                              type: number
                              description: 'Total quantity invoiced by Line ID. Format to include two decimal places. Quantities could reflect as debit or credit values depending on transaction.'
                              example: 4.00
                            measureUnitCode:
                              type: string
                              description: 'Fixed value = EA'
                              example: "EA"
                        priceDetails:
                          type: object
                          properties:
                            grossUnitPrice:
                              type: object
                              required:
                                - priceAmount
                              properties:
                                priceAmount:
                                  type: number
                                  description: 'Gross Unit price by Line ID. Amounts could reflect as debit or credit values depending on transaction.'
                                  example: 163.20
                            netUnitPrice:
                              type: object
                              required:
                                - priceAmount
                              properties:
                                priceAmount:
                                  type: number
                                  description: 'Net Unit price by Line ID. Amounts could reflect as debit or credit values depending on transaction.'
                                  example: 163.20
                        taxDetails:
                          type: array
                          items:
                            type: object
                            required:
                              - taxTypeCode
                              - taxRate
                            properties:
                              taxTypeCode:
                                type: string
                                description: 'Identification of the type of tax or fee applicable by Line ID. Format = 3 characters. Potential Tax Type Codes: ENV, FET, GST, LOC, STT, OTH.'
                                example: "FET"
                              subCountryCode:
                                type: string
                                description: 'Tax sub country code by Line ID. Format = two character Country (US or CA) - two character State abbreviation. Example: US-SC.'
                                example: "US-SC"
                              taxRate:
                                type: number
                                description: 'Tax rate by Line ID, where applicable.'
                                example: 3.00
                              taxAmount:
                                type: object
                                properties:
                                  amountValue:
                                    type: number
                                    description: 'Tax amount by Line ID, where applicable. NOTE: FET and ENV values will display as total value for line.'
                                    example: 19.58
                        allowanceOrCharge:
                          type: array
                          items:
                            type: object
                            required:
                              - allowanceOrChargeAmount
                            properties:
                              allowanceOrChargeTypeCode:
                                type: string
                                description: 'Tire Discount (TD) where applicable.'
                                example: "TD"
                              allowanceOrChargeAmount:
                                type: object
                                properties:
                                  amountValue:
                                    type: number
                                    description: 'Total discount amount by Line ID. Amounts could reflect as debit or credit values depending on transaction.'
                                    example: 16.32
                              taxDetails:
                                type: array
                                items:
                                  type: object
                                  example: []
                        lineItemTotalAmount:
                          type: object
                          properties:
                            amountValue:
                              type: number
                              description: 'Line item total net amount. Amounts could reflect as debit or credit values depending on transaction.'
                              example: 636.48
                        consignee:
                          type: object
                          properties:
                            partyID:
                              type: string
                              description: 'Customer Account Michelin Ship To (ST) Number. Michelin assigned Ship To number for customer receiving location. This is a 7 or 9 digit number.'
                              example: "1254692"
                            agencyCode:
                              type: string
                              description: 'Fixed value = 91'
                              example: "91"
                            name:
                              type: array
                              items:
                                type: string
                              description: 'Customer Account Michelin Ship To (ST) Name.'
                              example: ["ACME TIRE - MAIN ST LOCATION"]
                            address:
                              type: object
                              required:
                                - countryCode
                              properties:
                                street:
                                  type: array
                                  items:
                                    type: string
                                  description: 'Customer Account Michelin Ship To (ST) Street Address. Street address lines - 3 lines.'
                                  example: ["456 MAIN ST", null, null]
                                city:
                                  type: string
                                  description: 'Customer Account Michelin Ship To (ST) City.'
                                  example: "ANYTOWN"
                                district:
                                  type: string
                                  description: 'Customer Account Michelin Ship To (ST) District.'
                                  example: ""
                                postCode:
                                  type: string
                                  description: 'Customer Account Michelin Ship To (ST) Postal Code. Format allows for #####-####.'
                                  example: "12345-6789"
                                subCountry:
                                  type: string
                                  description: 'Customer Account Michelin Ship To (ST) State Abbreviation. Two character state abbreviation.'
                                  example: "SC"
                                countryCode:
                                  type: string
                                  description: 'Customer Account Michelin Ship To (ST) Country. Two character country code = US or CA.'
                                  example: "US"
                        tracingInformation:
                          type: array
                          items:
                            type: object
                            properties:
                              tracingID:
                                type: string
                                example: ""
                              serialNumber:
                                type: string
                                example: ""
                        lineNote:
                          type: object
                          properties:
                            languageCode:
                              type: string
                              example: "EN"
                            note:
                              type: array
                              items:
                                type: string
                              example: [""]
                        countryOfOrigin:
                          type: string
                          example: "US"
              controls:
                type: object
                properties:
                  numberOfLineItems:
                    type: integer
                    description: 'Total number of Line IDs.'
                    example: 3
                  totalQuantityValues:
                    type: number
                    description: 'Total quantity for all invoice Line IDs. Format to include two decimal places.'
                    example: 12.00
              summary:
                type: object
                required:
                  - totalAmount
                  - totalLineItemsAmount
                properties:
                  allowanceOrCharge:
                    type: array
                    items:
                      type: object
                      example: []
                  totalAmount:
                    type: object
                    required:
                      - amountValue
                    properties:
                      amountValue:
                        type: number
                        description: 'Total amount invoiced. Amounts could reflect as debit or credit values depending on transaction.'
                        example: 2000.00
                  totalLineItemsAmount:
                    type: object
                    required:
                      - amountValue
                    properties:
                      amountValue:
                        type: number
                        description: 'Total line items amount. Amounts could reflect as debit or credit values depending on transaction.'
                        example: 1950.00
                  taxDetails:
                    type: array
                    items:
                      type: object
                      required:
                        - taxTypeCode
                        - taxRate
                      properties:
                        taxTypeCode:
                          type: string
                          description: 'Tax type code reference. Format = 3 characters. Potential Tax Type Codes: ENV, FET, GST, LOC, STT, OTH.'
                          example: "FET"
                        subCountryCode:
                          type: string
                          description: 'Tax sub country code. Format = two character Country - two character State abbreviation. Example(s): US-SC, CA-AB.'
                          example: "US-SC"
                        taxRate:
                          type: number
                          description: 'Tax rate, where applicable.'
                          example: 3.00
                        taxAmount:
                          type: object
                          required:
                            - amountValue
                          properties:
                            amountValue:
                              type: number
                              description: 'Tax amount. NOTE: FET and ENV values will display as total value for line.'
                              example: 60.00
                        taxableAmount:
                          type: object
                          required:
                            - amountValue
                          properties:
                            amountValue:
                              type: number
                              description: 'Taxable amount, where applicable.'
                              example: 2000.00
              attachments:
                type: array
                description: 'If attachment indicator "2" or "3" is used in request, additional PDF Base64 details are displayed to allow for PDF conversion.'
                items:
                  type: object
                  required:
                    - documentNumber
                    - encodingScheme
                    - mimeType
                    - data
                  properties:
                    documentNumber:
                      type: string
                      description: 'Invoice, Credit or Debit Number.'
                      example: "123456789012"
                    encodingScheme:
                      type: string
                      example: "Base64"
                    mimeType:
                      type: string
                      example: "application/pdf"
                    data:
                      type: string
                      description: 'Base64 data details are present if attachment "2" or "3" used within actual request. These details are NOT present if attachment "1" used within actual request.'
                      example: "JVBERi0xLjMKJcTl8uXrp..."
              einvoicingID:
                type: array
                items:
                  type: object
                  example: []

    ###
    # Stock EDIWHEEL C1_1 REQUEST
    ###
    EDIWheel-C1_1-StockInquiryRequest:
      required:
        - buyerParty
        - consignee
        - documentID
        - orderLine
        - variant
      type: object
      properties:
        documentID:
          type: string
          description: 'DocumentID always "C1".'
          example: "C1"
        variant:
          type: string
          description: 'Variant always "1".'
          example: "1"
        buyerParty:
          type: object
          required:
            - partyID
            - agencyCode
          properties:
            partyID:
              type: string
              description: 'Michelin Bill To number for customer account (seven-digit number).'
              example: "1111111"
            agencyCode:
              type: string
              description: 'AgencyCode always "91".'
              example: "91"
        consignee:
          type: object
          required:
            - partyID
            - agencyCode
          properties:
            partyID:
              type: string
              description: 'Michelin Ship To number for customer ordering location (seven-digit number).'
              example: "1234567"
            agencyCode:
              type: string
              description: 'AgencyCode always "91".'
              example: "91"
        orderLine:
          type: array
          items:
            type: object
            required:
              - lineID
              - orderedArticle
            properties:
              lineID:
                type: string
                description: 'Sequential line number ID.'
                example: "001"
              orderedArticle:
                type: object
                required:
                  - requestedQuantity
                  - requestedDeliveryDate
                  - articleIdentification
                properties:
                  requestedQuantity:
                    type: object
                    required:
                      - quantityValue
                    properties:
                      quantityValue:
                        type: string
                        description: 'Requested quantity should be greater than 0 and should not include decimal values.'
                        example: "4"
                  requestedDeliveryDate:
                    type: string
                    description: 'Requested delivery date format YYYY-MM-DD. To take advantage of backorder delivery options, requested delivery date should be current date +3.'
                    example: "2025-01-03"
                  articleIdentification:
                    type: object
                    properties:
                      manufacturersArticleID:
                        type: string
                        description: 'Part number (Michelin 5-digit MSPN). If BuyersArticleID is being used, this value is not required.'
                      buyersArticleID:
                        type: string
                        description: 'Customer part number (CPN). If CPN is to be used, a cross-reference must exist within the Michelin system between the Michelin part number and the customer part number. <br>
                                  If ManufacturersArticleID is being used, this value is not required. Max characters allowed = 17.'
                    oneOf:
                      - title: "ManufacturersArticleID is used"
                        properties:
                          manufacturersArticleID:
                            example: "62115"
                          buyersArticleID:
                            example: ""
                        required: ["ManufacturersArticleID"]
                        description: 'Option 1: ManufacturersArticleID is used, and BuyersArticleID is not required'
                      - title: "BuyersArticleID is used"
                        properties:
                          manufacturersArticleID:
                            example: ""
                          buyersArticleID:
                            example: "321"
                        required: ["BuyersArticleID"]
                        description: 'Option 2: BuyersArticleID is used, and ManufacturersArticleID is not required'

    ###
    # Stock EDIWHEEL C1_1 RESPONSE
    ###
    EDIWheel-C1_1-StockInquiryResponse:
      type: object
      properties:
        documentID:
          type: string
          description: 'DocumentID always "C1".'
          example: "C1"
        variant:
          type: string
          description: 'Variant always "1".'
          example: "1"
        errorHead:
          type: object
          properties:
            errorCode:
              type: string
              description: |
                Error code if applicable. Error code = 0 indicates no error.
                
                Possible header error codes:
                - 0: No errors occurred. No action required.
                - 1: At least one item is incorrect. Details are distinctive in the error field on item level.
                - 303: No connection to ERP system. System is unavailable.
                - 405: Timeout during processing in ERP system. System has not responded within the expected time parameter.
                - 907: Invalid consignee(ship-to) party ID number. Consignee PartyID is missing from requests, or invalid, or is not setup or active within supplier system(s).
                - 915: Buyer (sold-to) party id number invalid. Buyer PartyID is missing or invalid from requests, OR is not setup or active within supplier system(s).
                - 920: Account not activated for this buyer (sold to) party ID number. Account is not in active status for order placement.
                - 999: Miscellaneous header error.
              example: "0"
        buyerParty:
          type: object
          properties:
            partyID:
              type: string
              description: 'Michelin Bill To number for customer account.'
              example: "1111111"
            agencyCode:
              type: string
              description: 'AgencyCode always "91".'
              example: "91"
        consignee:
          type: object
          properties:
            partyID:
              type: string
              description: 'Michelin Ship To number for customer ordering location.'
              example: "1234567"
            agencyCode:
              type: string
              description: 'AgencyCode always "91".'
              example: "91"
        orderLine:
          type: array
          items:
            type: object
            properties:
              lineID:
                type: string
                description: 'Sequential line number ID.'
                example: "001"
              orderedArticle:
                type: object
                properties:
                  articleIdentification:
                    type: object
                    properties:
                      buyersArticleID:
                        type: string
                        description: 'Customer part number (CPN) if used.'
                        example: ""
                      manufacturersArticleID:
                        type: string
                        description: 'Part number (Michelin 5-digit MSPN). MSPN is always returned regardless of whether the request includes CPN or MSPN.'
                        example: "62115"
                  articleDescription:
                    type: object
                    properties:
                      articleDescriptionText:
                        type: string
                        description: 'Product description.'
                        example: "265/70R17 115TDFNDRLTXMSORLMTP"
                  availability:
                    type: string
                    description: 'Availability indicator.'
                    example: "1"
                  requestedQuantity:
                    type: object
                    properties:
                      quantityValue:
                        type: integer
                        description: 'Requested quantity.'
                        example: 4
                  error:
                    type: object
                    properties:
                      errorCode:
                        type: string
                        description: |
                          Line error indicator.
                          
                          Possible line error codes:
                          - 0: No errors occurred. No action required.
                          - 903: Invalid article identification code. Article identification code used is invalid or inactive.
                          - 904: Invalid requested quantity. Requested quantity is 0.
                          - 919: No authority for brand/sales organization. Product is not authorized for customer to purchase.
                          - 931: Customer price not found or Invalid Marketing Status. Pricing is not established for products or Product not available for purchase.
                          - 945: MSPN on Hold. Product status is not eligible for ordering.
                          - 947: Invalid requested date. Invalid or missing requested delivery date.
                          - 999: Miscellaneous line error.
                        example: "0"
                      errorText:
                        type: string
                        description: 'Line error text.'
                        example: "NO_ERROR"
                  scheduleDetails:
                    type: array
                    items:
                      type: object
                      properties:
                        deliveryDate:
                          type: string
                          description: 'Expected delivery date if order placed by OrderByDate/OrderByTime.'
                          example: "2022-10-06"
                        deliveryTime:
                          type: string
                          description: 'Expected delivery time.'
                          example: "00:00EDT"
                        orderByDate:
                          type: string
                          description: 'To receive the product by the expected delivery date, the order must be placed by this date.'
                          example: "2025-01-03"
                        orderByTime:
                          type: string
                          description: 'To receive the product by the expected delivery date, the order must be placed by this time on the indicated date.'
                          example: "12:00EDT"
                        transportPriority:
                          type: string
                          description: 'Transport priority (e.g., REPL for Next Truck shipment).'
                          example: "REPL"
                        pickUp:
                          type: string
                          description: 'Indicator if the product is available for pickup from the supplier.'
                          example: "Y"
                        availableQuantity:
                          type: object
                          properties:
                            quantityValue:
                              type: integer
                              description: 'Quantity available.'
                              example: 4
                        priceDetails:
                          type: object
                          properties:
                            netUnitPrice:
                              type: object
                              properties:
                                priceAmount:
                                  type: number
                                  description: 'Product invoice price.'
                                  example: 163.2
                        charge:
                          type: array
                          items:
                            type: object
                            properties:
                              chargeCategory:
                                type: string
                                description: 'Charge category (e.g., DL for delivery or FET for Federal Excise Tax).'
                                example: "DL"
                              chargeAmount:
                                type: object
                                properties:
                                  amountValue:
                                    type: string
                                    description: 'Charge amount (e.g., delivery charge).'
                                    example: "3.00"
                        supplierParty:
                          type: object
                          properties:
                            partyID:
                              type: string
                              description: 'Supplier location indicator (e.g., U71 Michelin DC).'
                              example: "U71"
                            agencyCode:
                              type: string
                              description: 'AgencyCode always "91".'
                              example: "91"
                            name:
                              type: array
                              items:
                                type: string
                              description: 'Supplier location name.'
                              example: ["MTC LAURENS"]
                            address:
                              type: object
                              properties:
                                street:
                                  type: array
                                  items:
                                    type: string
                                  description: 'Supplier location street address.'
                                  example: ["101 MICHELIN DR"]
                                city:
                                  type: string
                                  description: 'Supplier location city.'
                                  example: "LAURENS"
                                postCode:
                                  type: string
                                  description: 'Supplier location postal code.'
                                  example: "29360"
                                subCountry:
                                  type: string
                                  description: 'Supplier location state.'
                                  example: "SC"
                                countryCode:
                                  type: string
                                  description: 'Supplier location country.'
                                  example: "US"
                            informationContact:
                              type: object
                              properties:
                                name:
                                  type: array
                                  items:
                                    type: string
                                  description: 'Supplier party name returning the available offer.'
                                  example: ["Michelin"]

    ###
    # AUTHENTICATION SCHEMAS
    ###
    AuthenticationTokenRequest:
      type: object
      required:
        - grant_type
        - client_id
        - client_secret
      properties:
        grant_type:
          type: string
          example: "client_credentials"
        client_id:
          type: string
        client_secret:
          type: string
    AuthenticationTokenResponse:
      type: object
      properties:
        access_token:
          type: string
        signature:
          type: string
        scope:
          type: string
        instance_url:
          type: string
        id:
          type: string
        token_type:
          type: string
        issued_at:
          type: string
    AuthenticationError:
      type: object
      properties:
        error:
          type: string
        error_description:
          type: string
    ###
    # OTHER SCHEMAS
    ###
    GeneralError:
      type: object
      properties:
        code:
          type: integer
          format: int32
        message:
          type: string
  parameters:
    skipParam:
      name: skip
      in: query
      description: number of items to skip
      required: true
      schema:
        type: integer
        format: int32
    limitParam:
      name: limit
      in: query
      description: max records to return
      required: true
      schema:
        type: integer
        format: int32
  responses:
    NotFound:
      description: Entity not found.
    IllegalInput:
      description: Illegal input for operation.
    GeneralError:
      description: General Error
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/GeneralError"
    UnauthorizedError:
      description: Authentication information is missing or invalid
      headers:
        WWW_Authenticate:
          schema:
            type: string
  securitySchemes:
    apikey:
      type: apiKey
      name: apikey
      in: header
    basicAuth:
      type: http
      scheme: basic
    oAuth2ClientCredentials:
      type: oauth2
      description: See http://developers.gettyimages.com/api/docs/v3/oauth2.html
      flows:
        clientCredentials:
          tokenUrl: "/idp/v2/b2b/oauth2/token"
          scopes: {}
