Mapp Fashion API

The Mapp Fashion (formerly Dressipi) recommendation API returns curated fashion and retail recommendations: related and complementary items for a seed product, themed and facetted recommendations, top items, and basket-based recommendations, plus an OAuth2 authorization-code + PKCE flow for obtaining and refreshing JWTs. The base URL is delegated to a customer-owned domain (https://your-domain.com/api).

OpenAPI Specification

mapp-fashion-openapi.yml Raw ↑
swagger: '2.0'
info:
  title: Mapp Fashion API
  version: '10'
  description: 'Mapp Fashion (Dressipi) recommendation API. Assembled verbatim from the per-operation OpenAPI fragments Mapp
    publishes on each endpoint page of https://docs.mapp.com/apidocs/. The base URL is customer-specific: https://your-domain.com/api/{endpoint}.'
schemes:
- https
security:
- api_key: []
  user_token: []
tags:
- name: recommendations
  description: Operations about recommendations
- name: items
  description: Operations for retrieving recommendations or items related to one or more seed items
- name: authorization
  description: Operations for obtaining or refreshing JWTs
paths:
  /oauth/authorize:
    get:
      summary: start the process of obtaining a JWT
      description: 'This is an oauth2 compliant authorize endpoint (see https://tools.ietf.org/html/rfc6749) with the following
        limitations:


        - Only grant code flow is allowed

        - PKCE is mandatory i.e. you must generate a code_verifier (a randomly generated secret) and include its url safe
        base64 encoded SHA256 hash as the code_challenge parameter

        - Only the S256 code challenge method is supported

        - The redirect URI must be set to urn:ietf:wg:oauth:2.0:oob:auto


        This api returns a grant code that can then be exchanged for a JWT


        This will create a new profile in the dressipi database and should therefore only be used if no refresh token is available.


        code_challenge is constructed in the following manner:


        - Pick a random code_verifier value, for example 1tBnEmtSImyCykPHxHYBdzpSFhKEj0Q1LuiHd4fdDlY

        - code challenge = Base64-url-encode(SHA256(code_verifier)):  p7CN1Zi4o5ARn1mYNvNFvj2r5cKkr2k6y7a573eHJXQ in the example
        above


        For more details on PKCE see https://tools.ietf.org/html/rfc7636, appendix A has the definition of base64-url-encode

        '
      produces:
      - application/json
      parameters:
      - in: query
        name: redirect_uri
        type: string
        enum:
        - urn:ietf:wg:oauth:2.0:oob:auto
        required: true
      - in: query
        name: response_type
        type: string
        enum:
        - code
        required: true
      - in: query
        name: client_id
        description: the api client id supplied by dressipi
        type: string
        required: true
      - in: query
        name: state
        description: a randomly generated state value
        type: string
        required: true
      - in: query
        name: code_challenge
        description: a urlsafe base64 encoded, SHA256 hash of the code verifier (a cryptographically secure randomly generated
          string).
        type: string
        required: true
      - in: query
        name: code_challenge_method
        type: string
        enum:
        - S256
        required: true
      responses:
        '200':
          description: Information about the authorization
          schema:
            $ref: '#/definitions/AuthorizationResponse'
        '400':
          description: oauth2 error
          schema:
            $ref: '#/definitions/ErrorResponse'
      tags:
      - authorization
      operationId: getOauthAuthorize
  /oauth/token:
    post:
      summary: exchange a grant code or refresh token for a JWT
      description: 'This allows the client to exchange a previously obtained grant code or refresh token for an access token
        for immediate use and a refresh token for subsequent requests.


        It may return an updated refresh token, in which case the stored refresh token should be updated


        The redirect URI must be set to urn:ietf:wg:oauth:2.0:oob:auto


        When exchanging a grant code from the authorize endpoint:

        - set grant_type to authorization_code

        - set code to the code returned by the authorize endpoint


        When refreshing a token:

        - set grant_type to refresh_token

        - set refresh_token to the previously obtained refresh token


        '
      produces:
      - application/json
      consumes:
      - application/x-www-form-urlencoded
      parameters:
      - in: formData
        name: redirect_uri
        type: string
        enum:
        - urn:ietf:wg:oauth:2.0:oob:auto
        required: true
      - in: formData
        name: grant_type
        type: string
        enum:
        - authorization_code
        - refresh_token
        required: true
      - in: formData
        name: code
        description: the authorization_code previously obtained
        type: string
        required: false
      - in: formData
        name: refresh_token
        description: the refresh_token previously obtained
        type: string
        required: false
      - in: formData
        name: client_id
        description: the api client id supplied by dressipi
        type: string
        required: true
      - in: formData
        name: code_verifier
        description: for authorization_code requests, the code_verifier that was used to generate the associated code_challenge
        type: string
        required: false
      responses:
        '200':
          description: The generated tokens
          schema:
            $ref: '#/definitions/TokenResponse'
        '400':
          description: oauth2 error
          schema:
            $ref: '#/definitions/ErrorResponse'
      tags:
      - authorization
      operationId: postOauthToken
  /items/{id}:
    get:
      summary: Get information about an item by id
      description: 'Fetches information about a garment. The garment format is implicitly set to detailed.

        '
      produces:
      - application/json
      parameters:
      - in: path
        name: id
        description: An identifier for the source item. The interpretation of this item is controlled by the `identifier_type`
          parameter
        type: string
        required: true
      - in: query
        name: identifier_type
        description: 'How dressipi should interpret the item id. Not all of these may be available, depending on the information
          in the product feed and how it is processed. Contact dressipi for examples of these types for your specific integration.


          In general


          - product-code is the style + color identifier from the feed

          - sku is style without color or size (can be supplemented with an extra parameter specifying the color + size variant)

          '
        type: string
        default: product-code
        enum:
        - dressipi-id
        - ean
        - gtin
        - product-code
        - sku
        - ancillary-product-code
        required: false
      - in: query
        name: pretty
        description: 'If true, pretty print Json output. This increases response size and should usually be off in production
          environments

          '
        type: boolean
        required: false
      - in: query
        name: include_dressipi_ids
        description: 'Controls whether dressipi garment ids (raw_garment_id) are included in response

          '
        type: boolean
        default: true
        required: false
      - in: query
        name: fields
        description: A list of garment attributes to fetch. Only supported for garment_format=document or detailed. Custom
          fields may be available - contact dressipi for details
        type: array
        items:
          type: string
          enum:
          - size
          - why
          - verdict
          - recommendedness
          - features
          - occasions
          - garment_category_id
          - owned
          - department
          - eans
        required: false
      - in: query
        name: locale
        description: 'A locale parameter describing what stock information to use and what language to return text in (if
          applicable). This parameter will only

          function if the corresponding information is in the product feed & processed accordingly. If stock local and UI
          language are not the same,

          specify the language parameter in addition to this one.

          '
        type: string
        required: false
      - in: query
        name: language
        description: 'Allows you to specify a locale used for feed attributes such as product name that should be localized
          using a different locale to price &

          stock information. This parameter will only function if the corresponding information is in the product feed & processed
          accordingly.

          '
        type: string
        required: false
      responses:
        '200':
          description: Information about the garment
          schema:
            $ref: '#/definitions/Garment'
        '422':
          description: garment not found
          schema:
            $ref: '#/definitions/Error'
      tags:
      - items
      operationId: getItemsId
  /items/top:
    get:
      summary: return top curated recommendations for a user
      description: 'Returns curated recommendations for a user profile

        without targeting a specific garment.


        This endpoint provides personalized item recommendations based on the user''s profile

        and preferences.

        Currently only available for the womens department

        '
      produces:
      - application/json
      parameters:
      - in: query
        name: garment_format
        description: 'The desired response format.


          The response includes a description of the outfits / similar items but no data on the items themselves: since these
          may be repeated within the response, garment data is provided separately in the response.


          The `detailed` format includes the most amount of item metadata (name, description, price etc).


          The `document` format only includes item identifiers, and if requested dressipi generated information about the
          item, such as predicted size.


          The `retailer_ids` format only returns the item identifiers.

          '
        type: string
        default: retailer_ids
        enum:
        - detailed
        - document
        - retailer_ids
        required: false
      - in: query
        name: pretty
        description: 'If true, pretty print json output. This increases response size and should usually be off in production
          environments

          '
        type: boolean
        required: false
      - in: query
        name: include_dressipi_ids
        description: 'Controls whether dressipi garment ids (raw_garment_id) are included in response

          '
        type: boolean
        default: true
        required: false
      - in: query
        name: fields
        description: A list of garment attributes to fetch. Only supported for garment_format=document or detailed. Custom
          fields may be available - contact dressipi for details
        type: array
        items:
          type: string
          enum:
          - size
          - recommendedness
          - garment_category_id
          - owned
          - department
        required: false
      - in: query
        name: locale
        description: 'A locale parameter describing what stock information to use and what language to return text in (if
          applicable). This parameter will only

          function if the corresponding information is in the product feed & processed accordingly. If stock local and UI
          language are not the same,

          specify the language parameter in addition to this one.

          '
        type: string
        required: false
      - in: query
        name: language
        description: 'Allows you to specify a locale used for feed attributes such as product name that should be localized
          using a different locale to price &

          stock information. This parameter will only function if the corresponding information is in the product feed & processed
          accordingly.

          '
        type: string
        required: false
      - in: query
        name: department
        description: 'The department to which the items will belong

          '
        type: string
        default: female
        enum:
        - female
        - male
        - girls
        - boys
        - unisex
        required: false
      - in: query
        name: excluded_ids
        description: 'List of product identifiers to be excluded from the results.

          '
        type: array
        items:
          type: string
        collectionFormat: csv
        required: false
      - in: query
        name: include_user_data
        description: 'Include information about the user in the response (if known)

          '
        type: boolean
        required: false
      responses:
        '200':
          description: Information about the curated recommendations
          schema:
            $ref: '#/definitions/TopRecommendationsResponse'
        '404':
          description: missing picker
          schema:
            $ref: '#/definitions/Error'
        '400':
          description: missing client_id
          schema:
            $ref: '#/definitions/Error'
      tags:
      - items
      operationId: getItemsTop
  /recommendations/facetted:
    post:
      summary: return facetted recommendations for a user
      description: "The facetted recommendations api allows retrieval of the most recommended garments for a user.\nThe result\
        \ set can be filtered by specifying one or more filters. Optionally retrieval of information\nabout the number of\
        \ hits for other values of the filter are returned\n\nThe currently recognized aggregations are\n\n- garment_category\n\
        - brand\n- occasion\n- must_have\n- retailer_labels (previously known as retailer_categories): significance dependent\
        \ on retailer and data present in feed\n- store: if dressipi has been provided with per-store availability data, this\
        \ filters or aggregates on availability by store\n- feature_ids (dressipi feature ids)\n- not_features_ids (dressipi\
        \ feature ids). This returns results without any of the listed feature ids\n- price\n- reduced_by (range filter that\
        \ accepts values from 0 to 100)\n- season: filters or aggregates on the season a garment belongs to. Allowed season\
        \ codes are of the form `ss_YYYY` (spring/summer) or `aw_YYYY` (autumn/winter), e.g. `ss_2024`, `aw_2024`\n\nThe retailer_labels\
        \ aggregation allows you to query against fields in the product feed consumed by dressipi (these should\nbe agreed\
        \ with dressipi)\n\nFor example to request a garment category of 1 (dresses) submit\n\n```\n{\n  \"facets\": [\n \
        \   {\n      \"name\": \"garment_category\",\n      \"value\": [1]\n    }\n  ]\n}\n```\n\nMultiple values can be passed\
        \ for a single filter, these will be or-ed.\n\nFor example, to select garments that have all of\n\n- feature id 1\
        \ or 2,\n- feature id 3 or 4\n\nsubmit\n```\n{\n  \"facets\": [\n    {\n      \"name\": \"feature_ids\",\n      \"\
        filters\": [\n        {\"value\": [1,2]},\n        {\"value\": [3,4]}\n      ]\n    }\n  ]\n}\n```\n\nMultiple filters\
        \ can be passed, these will be and-ed (Specifying multiple filters with the same name is not supported)\nFor example,\
        \ to return items matching a specific retailer label and available from a specific store, submit\n\n```\n{\n  \"facets\"\
        : [\n    {\n      \"name\": \"retailer_labels\",\n      \"value\": [1,2]\n    },\n    {\n      \"name\": \"store\"\
        ,\n      \"value\": [\"storeID1\",\"storeID2\"]\n    }\n  ]\n}\n```\n\n\nIf the size for a facet is set to non 0,\
        \ count information will be returned about other filter values. Conceptually, the count returned in an agggregation\
        \ bucket is the number of results you would get if the query was filtered by that aggregation value.\n\nNumerical\
        \ facets use a slightly different syntax, for example\n\n```\n{\n  \"facets\": [\n    {\n      \"name\": \"price\"\
        ,\n      \"filters\": [\n        {\n          \"from\": 50,\n          \"to\": 100\n        }\n      ],\n      \"\
        ranges\": [\n        {\"to\": 50},\n        {\"from\": 50, \"to\": 100},\n        {\"from\": 100}\n      ]\n    }\n\
        \  ]\n}\n```\nreturns items whose price between 50 (inclusive) and 100 and the number of results within each of the\
        \ indicated price ranges.\n\n\n```\n{\n  \"facets\": [\n    {\n      \"name\": \"reduced_by\",\n      \"filters\"\
        : [\n        {\n          \"from\": 30\n        }\n      ]\n    }\n  ]\n}\n```\n\nReturns items reduced by at least\
        \ 30%\n\n\n```\n{\n  \"facets\": [\n    {\n      \"name\": \"season\",\n      \"filters\": [\n        {\"value\":\
        \ [\"ss_2026\"]}\n      ]\n    }\n  ]\n}\n```\n\nReturns items belonging to the Spring/Summer 2026 season\n\n\nDepending\
        \ on the garment_format requested, extra fields may be present on the garment, however `garment_id` and `raw_garment_id`\n\
        will always be present\n"
      produces:
      - application/json
      consumes:
      - application/json
      parameters:
      - in: query
        name: garment_format
        description: 'The desired response format.


          The response includes a description of the outfits / similar items but no data on the items themselves: since these
          may be repeated within the response, garment data is provided separately in the response.


          The `detailed` format includes the most amount of item metadata (name, description, price etc).


          The `document` format only includes item identifiers, and if requested dressipi generated information about the
          item, such as predicted size.


          The `retailer_ids` format only returns the item identifiers.

          '
        type: string
        default: retailer_ids
        enum:
        - detailed
        - document
        - retailer_ids
        required: false
      - in: query
        name: fields
        description: A list of garment attributes to fetch. Only supported for garment_format=document or detailed. Custom
          fields may be available - contact dressipi for details
        type: array
        items:
          type: string
          enum:
          - size
          - why
          - verdict
          - recommendedness
          - features
          - occasions
          - garment_category_id
          - owned
          - department
          - eans
        required: false
      - in: query
        name: pretty
        description: 'If true, pretty print json output. This increases response size and should usually be off in production
          environments

          '
        type: boolean
        required: false
      - in: query
        name: include_dressipi_ids
        description: 'Controls whether dressipi garment ids (raw_garment_id) are included in response

          '
        type: boolean
        default: true
        required: false
      - in: query
        name: page
        description: 'The page from which to start results

          '
        type: integer
        format: int32
        default: 1
        required: false
      - in: query
        name: per_page
        description: 'The number of result to return per page

          '
        type: integer
        format: int32
        default: 12
        required: false
      - in: query
        name: device_type
        description: 'A device type identifier. This allows segmenting a/b test statistics

          in the same way as you do.

          '
        type: string
        required: false
      - in: query
        name: locale
        description: 'A locale parameter describing what stock information to use and what language to return text in (if
          applicable). This parameter will only

          function if the corresponding information is in the product feed & processed accordingly. If stock local and UI
          language are not the same,

          specify the language parameter in addition to this one.

          '
        type: string
        required: false
      - in: query
        name: language
        description: 'Allows you to specify a locale used for feed attributes such as product name that should be localized
          using a different locale to price &

          stock information. This parameter will only function if the corresponding information is in the product feed & processed
          accordingly.

          '
        type: string
        required: false
      - name: RecommendationsFacetted
        in: body
        required: true
        schema:
          $ref: '#/definitions/postRecommendationsFacetted'
      responses:
        '200':
          description: Information about the recommended garments
          schema:
            $ref: '#/definitions/FacettedRecommendationsResponse'
        '422':
          description: error message
          schema:
            $ref: '#/definitions/Error'
      tags:
      - recommendations
      operationId: postRecommendationsFacetted
  /items/{id}/complementary:
    get:
      summary: return outfits or recommended items for a set of source items
      description: 'Fetches related recommendations or outfits (items which as a set complement the source item(s)) based

        on business rules agreed with Dressipi. Depending on the items passed and these rules, the result might be related
        to some, all or none of the items specified


        For example this could be used on the checkout page to show recommendations based on the content of the

        user''s basket.


        This is the api equivalent of the shopping basket widget

        '
      produces:
      - application/json
      parameters:
      - in: query
        name: garment_format
        description: 'The desired response format.


          The response includes a description of the outfits / similar items but no data on the items themselves: since these
          may be repeated within the response, garment data is provided separately in the response.


          The `detailed` format includes the most amount of item metadata (name, description, price etc).


          The `document` format only includes item identifiers, and if requested Dressipi generated information about the
          item, such as predicted size.


          The `retailer_ids` format only returns the item identifiers.

          '
        type: string
        default: retailer_ids
        enum:
        - detailed
        - document
        - retailer_ids
        required: false
      - in: query
        name: identifier_type
        description: 'How Dressipi should interpret the item id. Not all of these may be available, depending on the information
          in the product feed and how it is processed. Contact Dressipi for examples of these types for your specific integration.


          In general


          - product-code is the style + color identifier from the feed

          - sku is style without color or size (can be supplemented with an extra parameter specifying the color + size variant)

          '
        type: string
        default: product-code
        enum:
        - dressipi-id
        - ean
        - gtin
        - product-code
        - sku
        - ancillary-product-code
        required: false
      - in: query
        name: pretty
        description: 'If true, pretty print Json output. This increases response size and should usually be off in production
          environments

          '
        type: boolean
        required: false
      - in: query
        name: include_dressipi_ids
        description: 'Controls whether Dressipi garment ids (raw_garment_id) are included in response

          '
        type: boolean
        default: true
        required: false
      - in: query
        name: locale
        description: 'A locale parameter describing what stock information to use and what language to return text in (if
          applicable). This parameter will only

          function if the corresponding information is in the product feed & processed accordingly. If stock local and UI
          language are not the same,

          specify the language parameter in addition to this one.

          '
        type: string
        required: false
      - in: query
        name: language
        description: 'Allows you to specify a locale used for feed attributes such as product name that should be localized
          using a different locale to price &

          stock information. This parameter will only function if the corresponding information is in the product feed & processed
          accordingly.

          '
        type: string
        required: false
      - in: query
        name: excluded_ids
        description: 'List of product identifiers to be excluded from the results

          '
        type: array
        items:
          type: string
        collectionFormat: csv
        required: false
      - in: path
        name: id
        description: An identifier for one or more source item. The interpretation of this item is controlled by the `identifier_type`
          parameter
        type: array
        items:
          type: string
        required: true
      responses:
        '200':
          description: Information about the recommended garments
          schema:
            $ref: '#/definitions/ComplementaryItemsResponse'
        '422':
          description: unrecognized product codes
          schema:
            $ref: '#/definitions/Error'
      tags:
      - items
      operationId: getItemsIdComplementary
  /items/{id}/related:
    get:
      summary: return outfits or similar items for a single source item
      description: 'Fetches either similar items (items which are related to the source item by common features)

        or outfits (items which as a set complement the source item).''


        This is the api equivalent of the outfits widget.

        '
      produces:
      - application/json
      parameters:
      - in: path
        name: id
        description: An identifier for the source item. The interpretation of this item is controlled by the `identifier_type`
          parameter
        type: string
        required: true
      - in: query
        name: methods
        description: 'The methods through which related items should be generated. These are attempted in order.


          The `partner_outfits` method is only available if Dressipi has been provided with curated outfit data for the item

          '
        type: array
        items:
          type: string
          enum:
          - similar_items
          - outfits
          - partner_outfits
        default:
        - outfits
        - similar_items
        collectionFormat: csv
        required: false
      - in: query
        name: try_all_methods
        description: 'If false (the default), the methods listed are attempted until one succeeds and only results for that
          method are returned.


          If true, results for all successful methods are returned

          '
        type: boolean
        required: false
      - in: query
        name: locale
        description: 'A locale parameter describing what stock information to use and what language to return text in (if
          applicable). This parameter will only

          function if the corresponding information is in the product feed & processed accordingly. If stock local and UI
          language are not the same,

          specify the language parameter in addition to this one.

          '
        type: string
        required: false
      - in: query
        name: language
        description: 'Allows you to specify a locale used for feed attributes such as product name that should be localized
          using a different locale to price &

          stock information. This parameter will only function if the corresponding information is in the product feed & processed
          accordingly.

          '
        type: string
        required: false
      - in: query
        name: exclude_source_garment
        description: 'Whether to exclude the source item from any returned outfits or not

          '
        type: boolean
        default: true
        required: false
      - in: query
        name: outfits_per_occasion
        description: 'The number of outfits to attempt to return *per occasion*. In the case of a single occasion garment,
          this

          limit is doubled internally

          '
        type: integer
        format: int32
        default: 2
        required: false
      - in: query
        name: max_similar_items
        description: 'The maximum number of similar items to return.

          '
        type: integer
        format: int32
        default: 6
        required: false
      - in: query
        name: stores
        description: 'List of stores to filter recommendations by. An item must be available in at least one of the specified
          stores in order

          to be returned.


          This requires that per-store availability data is shared with dressipi

          '
        type: array
        items:
          type: string
        collectionFormat: csv
        required: false
      - in: query
        name: garment_format
        description: 'The desired response format.


          The response includes a description of the outfits / similar items but no data on the items themselves: since these
          may be repeated within the response, garment data is provided separately in the response.


          The `detailed` format includes the most amount of item metadata (name, description, price etc).


          The `document` format only includes item identifiers, and if requested dressipi generated information about the
          item, such as predicted size.


          The `retailer_ids` format only returns the item identifiers.

          '
        type: string
        default: retailer_ids
        enum:
        - detailed
        - document
        - retailer_ids
        required: false
      - in: query
        name: identifier_type
        description: 'How dressipi should interpret the item id. Not all of these may be available, depending on the information
          in the product feed and how it is processed. Contact dressipi for examples of these types for your specific integration.


          In general


          - product-code is the style + color identifier from the feed

          - sku is style without color or size (can be supplemented with an extra parameter specifying the color + size variant)

          '
        type: string
        default: product-code
        enum:
        - dressipi-id
        - ean
        - gtin
        - product-code
        - sku
        - ancillary-product-code
        required: false
      - in: query
        name: pretty
        description: 'If true, pretty print Json output. This increases response size and should usually be off in production
          environments

          '
        type: boolean
        required: false
      - in: query
        name: include_dressipi_ids
        description: 'Controls whether Dressipi garment ids (raw_garment_id) are included in response

          '
        type: boolean
        default: true
        required: false
      - in: query
        name: fields
        description: A list of garment attributes to fetch. Only supported for garment_format=document or detailed. Custom
          fields may be available - contact Dressipi for details
        type: array
        items:
          type: string
          enum:
          - size
          - why
          - verdict
          - recommendedness
          - features
          - occasions
          - garment_category_id
          - owned
          - department
          - eans
        required: false
      - in: query
        name: sku_refinement
        description: 'When identifier_type is set to sku, identifies the particular size+color variant

          '
        type: string
        required: false
      - in: query
        name: excluded_ids
        description: 'List of product identifiers to be excluded from the results.

          The interpretation of this item is controlled by the `identifier_type` parameter

          '
        type: array
        items:
          type: string
        collectionFormat: csv
        required: false
      - in: query
        name: include_user_data
        description: 'Include information about the user in the response (if known)



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