Topi catalog API

Topi catalog for sellers

OpenAPI Specification

topi-catalog-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: topi Seller catalog API
  description: '# Localization


    Strings returned can be localized when the _Accept-Language_ header is provided in the request. It should follow the [RFC-2616 convention](http://www.ietf.org/rfc/rfc2616.txt).

    '
  version: 1.0.0
servers:
- url: https://seller-api-sandbox.topi-sandbox.eu
- url: https://seller-api.topi.eu
- url: https://seller-api.topi-staging.eu
- url: https://seller-api-sandbox.topi-sandbox-staging.eu
tags:
- name: catalog
  description: Topi catalog for sellers
paths:
  /v1/catalog/basket/pricing:
    post:
      tags:
      - catalog
      summary: Calculate pricing for a whole basket
      description: '## <span style="color:#cc3333">*Deprecated*</span>


        Calculate pricing endpoint is being replaced by two other endpoints:

        - listRecommendedRentalPrices

        - cartRentalOverview


        Please make sure to migrate to one of the above endpoints based on your use case.



        ### Description


        calculate the price for a product'
      operationId: catalog#calculateBasketPricing
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CalculateBasketPricingRequestBody'
            example:
              pricing_requests:
              - base_rental_price:
                  currency: EUR
                  gross: 119000
                  net: 100000
                  tax_rate: 1900
                identifier: abc123
                price:
                  currency: EUR
                  gross: 119000
                  net: 100000
                  tax_rate: 1900
                quantity: 1
                seller_product_reference:
                  reference: 123ab-5343
                  source: sap
                sublines:
                - base_rental_price:
                    currency: EUR
                    gross: 119000
                    net: 100000
                    tax_rate: 1900
                  price:
                    currency: EUR
                    gross: 119000
                    net: 100000
                    tax_rate: 1900
                  seller_product_reference:
                    reference: 123ab-5343
                    source: sap
      responses:
        '200':
          description: OK response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalculateBasketPricingResponseBody'
              example:
                basket_total_pay_now:
                  currency: EUR
                  gross: 119000
                  net: 100000
                  tax_rate: 1900
                basket_total_rent:
                  currency: EUR
                  gross: 119000
                  net: 100000
                  tax_rate: 1900
                summaries:
                - available_contract_types:
                  - rent
                  default_tenure: 1
                  identifier: abc123
                  is_supported: true
                  pay_now:
                    amount:
                      currency: EUR
                      gross: 119000
                      net: 100000
                      tax_rate: 1900
                    id: 739b63c2-9e58-4964-b38d-4ebb424de242
                  pay_now_excluding_sublines:
                    amount:
                      currency: EUR
                      gross: 119000
                      net: 100000
                      tax_rate: 1900
                    id: 739b63c2-9e58-4964-b38d-4ebb424de242
                  rent:
                  - duration: 12
                    id: 739b63c2-9e58-4964-b38d-4ebb424de242
                    monthly_amount:
                      currency: EUR
                      gross: 119000
                      net: 100000
                      tax_rate: 1900
                  rent_excluding_sublines:
                  - duration: 12
                    id: 739b63c2-9e58-4964-b38d-4ebb424de242
                    monthly_amount:
                      currency: EUR
                      gross: 119000
                      net: 100000
                      tax_rate: 1900
                  sublines:
                  - available_contract_types:
                    - rent
                    default_tenure: 1
                    identifier: abc123
                    is_supported: true
                    pay_now:
                      amount:
                        currency: EUR
                        gross: 119000
                        net: 100000
                        tax_rate: 1900
                      id: 739b63c2-9e58-4964-b38d-4ebb424de242
                    rent:
                    - duration: 12
                      id: 739b63c2-9e58-4964-b38d-4ebb424de242
                      monthly_amount:
                        currency: EUR
                        gross: 119000
                        net: 100000
                        tax_rate: 1900
                    summary: Rent with topi for €24.32/month
                    total_pay_now:
                      amount:
                        currency: EUR
                        gross: 119000
                        net: 100000
                        tax_rate: 1900
                      id: 739b63c2-9e58-4964-b38d-4ebb424de242
                    total_rent:
                    - duration: 12
                      id: 739b63c2-9e58-4964-b38d-4ebb424de242
                      monthly_amount:
                        currency: EUR
                        gross: 119000
                        net: 100000
                        tax_rate: 1900
                  summary: Rent with topi for €24.32/month
                  total_pay_now:
                    amount:
                      currency: EUR
                      gross: 119000
                      net: 100000
                      tax_rate: 1900
                    id: 739b63c2-9e58-4964-b38d-4ebb424de242
                  total_rent:
                  - duration: 12
                    id: 739b63c2-9e58-4964-b38d-4ebb424de242
                    monthly_amount:
                      currency: EUR
                      gross: 119000
                      net: 100000
                      tax_rate: 1900
        '400':
          description: 'BadRequest: Bad Request response.'
          content:
            application/vnd.goa.error:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: 'Unauthorized: Unauthorized response.'
          content:
            application/json:
              schema:
                type: string
                example: abc123
              example: abc123
        '403':
          description: 'InvalidScopes: Forbidden response.'
          content:
            application/json:
              schema:
                type: string
                example: abc123
              example: abc123
        '404':
          description: 'NotFound: Not Found response.'
          content:
            application/vnd.goa.error:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: 'Unprocessable: Unprocessable Entity response.'
          content:
            application/vnd.goa.error:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - OAuth2Seller_header_Authorization:
        - seller-catalog:read
      x-code-samples:
      - lang: curl
        label: cURL
        source: "curl -X POST https://seller-api.topi.eu/v1/catalog/basket/pricing \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"pricing_requests\": [\n    {\n      \"base_rental_price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000,\n        \"tax_rate\": 1900\n      },\n      \"identifier\": \"abc123\",\n      \"price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000,\n        \"tax_rate\": 1900\n      },\n      \"quantity\": 1,\n      \"seller_product_reference\": {\n        \"reference\": \"123ab-5343\",\n        \"source\": \"sap\"\n      },\n      \"sublines\": [\n        {\n          \"base_rental_price\": {\n            \"currency\": \"EUR\",\n            \"gross\": 119000,\n            \"net\": 100000,\n            \"tax_rate\": 1900\n          },\n          \"price\": {\n            \"currency\": \"EUR\",\n            \"gross\": 119000,\n            \"net\": 100000,\n            \"tax_rate\": 1900\n          },\n          \"seller_product_reference\": {\n            \"reference\": \"123ab-5343\",\n            \"source\": \"sap\"\n          }\n        }\n      ]\n    }\n  ]\n}'\n"
      - lang: javascript
        label: JavaScript (fetch)
        source: "const response = await fetch('https://seller-api.topi.eu/v1/catalog/basket/pricing', {\n  method: 'POST',\n  headers: {\n    'Authorization': `Bearer ${ACCESS_TOKEN}`,\n    'Content-Type': 'application/json'\n  },\n  body: JSON.stringify({\n  \"pricing_requests\": [\n    {\n      \"base_rental_price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000,\n        \"tax_rate\": 1900\n      },\n      \"identifier\": \"abc123\",\n      \"price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000,\n        \"tax_rate\": 1900\n      },\n      \"quantity\": 1,\n      \"seller_product_reference\": {\n        \"reference\": \"123ab-5343\",\n        \"source\": \"sap\"\n      },\n      \"sublines\": [\n        {\n          \"base_rental_price\": {\n            \"currency\": \"EUR\",\n            \"gross\": 119000,\n            \"net\": 100000,\n            \"tax_rate\": 1900\n          },\n          \"price\": {\n            \"currency\": \"EUR\",\n            \"gross\": 119000,\n            \"net\": 100000,\n            \"tax_rate\": 1900\n          },\n          \"seller_product_reference\": {\n            \"reference\": \"123ab-5343\",\n            \"source\": \"sap\"\n          }\n        }\n      ]\n    }\n  ]\n})\n});\n\nconst data = await response.json();\nconsole.log(data);\n"
  /v1/catalog/carts/rental-overview:
    post:
      tags:
      - catalog
      summary: Get rental overview for products
      operationId: catalog#cartRentalOverview
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CartRentalOverviewRequestBody'
            example:
              products:
              - base_rental_price:
                  currency: EUR
                  gross: 119000
                  net: 100000
                  tax_rate: 1900
                price:
                  currency: EUR
                  gross: 119000
                  net: 100000
                  tax_rate: 1900
                quantity: 1
                seller_product_reference:
                  reference: 123ab-5343
                  source: sap
      responses:
        '200':
          description: OK response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CartRentalOverviewResult'
              example:
                can_checkout: false
                currency: EUR
                product_prices:
                - available_rental_terms:
                  - duration: 12
                    id: 739b63c2-9e58-4964-b38d-4ebb424de242
                    monthly_amount:
                      currency: EUR
                      gross: 119000
                      net: 100000
                      tax_rate: 1900
                  can_checkout: false
                  currency: EUR
                  has_rental_terms: false
                  quantity: 1
                  seller_product_reference:
                    reference: 123ab-5343
                    source: sap
                  summary: Rent with topi from €23.45/month
                  total_rental_amount: 1
                total_rental_amount: 1
                total_rental_summary: Rent with topi from €123.45/month
        '401':
          description: 'Unauthorized: Unauthorized response.'
          content:
            application/json:
              schema:
                type: string
                example: abc123
              example: abc123
        '403':
          description: 'InvalidScopes: Forbidden response.'
          content:
            application/json:
              schema:
                type: string
                example: abc123
              example: abc123
      security:
      - OAuth2Seller_header_Authorization:
        - seller-catalog:read
      x-code-samples:
      - lang: curl
        label: cURL
        source: "curl -X POST https://seller-api.topi.eu/v1/catalog/carts/rental-overview \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"products\": [\n    {\n      \"base_rental_price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000,\n        \"tax_rate\": 1900\n      },\n      \"price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000,\n        \"tax_rate\": 1900\n      },\n      \"quantity\": 1,\n      \"seller_product_reference\": {\n        \"reference\": \"123ab-5343\",\n        \"source\": \"sap\"\n      }\n    }\n  ]\n}'\n"
      - lang: javascript
        label: JavaScript (fetch)
        source: "const response = await fetch('https://seller-api.topi.eu/v1/catalog/carts/rental-overview', {\n  method: 'POST',\n  headers: {\n    'Authorization': `Bearer ${ACCESS_TOKEN}`,\n    'Content-Type': 'application/json'\n  },\n  body: JSON.stringify({\n  \"products\": [\n    {\n      \"base_rental_price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000,\n        \"tax_rate\": 1900\n      },\n      \"price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000,\n        \"tax_rate\": 1900\n      },\n      \"quantity\": 1,\n      \"seller_product_reference\": {\n        \"reference\": \"123ab-5343\",\n        \"source\": \"sap\"\n      }\n    }\n  ]\n})\n});\n\nconst data = await response.json();\nconsole.log(data);\n"
  /v1/catalog/check-supported:
    post:
      tags:
      - catalog
      summary: Check if products are supported
      description: 'Checks whether the products with the given references are supported or not.


        ### When using in the Sandbox


        Returns the requested products with their available contract terms, depending on the combination of the supplied Source and Reference values:


        - To get a product with `PayNow` contract terms : The supplied `source` should be `SAP` with `reference` specified as `1234-5678`.

        - To get a product with `Rent` contract terms : There are two ways to get this value either when the supplied `source` is `SAP` and the `reference` is `1111-1111` or with `source` set to `B6` and `reference` specified as `2222-2222`.

        - To get a product that is not topi supported: Specify the `source` as `SAP` and `reference` should be `8765-4321`.


        In other cases this method will return an empty array.


        This method has been defined as POST because the size of the input values could grow fast.

        '
      operationId: catalog#checkSupported
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckSupportedRequestBody'
            example:
              seller_product_references:
              - reference: 123ab-5343
                source: sap
      responses:
        '200':
          description: OK response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductsSummary'
              example:
                products:
                - available_contract_terms:
                    can_pay_now: false
                    can_rent: false
                    rent:
                      duration: 1
                  id: 739b63c2-9e58-4964-b38d-4ebb424de242
                  is_supported: false
                  seller_product_reference:
                    reference: 123ab-5343
                    source: sap
        '401':
          description: 'Unauthorized: Unauthorized response.'
          content:
            application/json:
              schema:
                type: string
                example: abc123
              example: abc123
        '403':
          description: 'InvalidScopes: Forbidden response.'
          content:
            application/json:
              schema:
                type: string
                example: abc123
              example: abc123
      security:
      - OAuth2Seller_header_Authorization:
        - seller-catalog:read
      x-code-samples:
      - lang: curl
        label: cURL
        source: "curl -X POST https://seller-api.topi.eu/v1/catalog/check-supported \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"seller_product_references\": [\n    {\n      \"reference\": \"123ab-5343\",\n      \"source\": \"sap\"\n    }\n  ]\n}'\n"
      - lang: javascript
        label: JavaScript (fetch)
        source: "const response = await fetch('https://seller-api.topi.eu/v1/catalog/check-supported', {\n  method: 'POST',\n  headers: {\n    'Authorization': `Bearer ${ACCESS_TOKEN}`,\n    'Content-Type': 'application/json'\n  },\n  body: JSON.stringify({\n  \"seller_product_references\": [\n    {\n      \"reference\": \"123ab-5343\",\n      \"source\": \"sap\"\n    }\n  ]\n})\n});\n\nconst data = await response.json();\nconsole.log(data);\n"
  /v1/catalog/import:
    post:
      tags:
      - catalog
      summary: Import products into the catalog
      description: 'Add a batch of products to the catalog.


        ### When using in the Sandbox


        Use the following scenarios to get different fixtures:


        - Status `"completed"`: `Send a catalog with less than 10 products`

        - Status `"created"`: `Send a catalog with 10 products or more`

        - Status `"failed"`: `Send a product inside the catalog with the "source" or the "reference" in the "seller_product_reference" as empty string`

        '
      operationId: catalog#importCatalog
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ImportCatalogRequestBody'
            example:
              products:
              - base_rental_price:
                  currency: EUR
                  gross: 119000
                  net: 100000
                description: aaa
                extra_details:
                - property: memory
                  value: 16GB DDR5
                image:
                  url: https://example.com/foo
                is_active: false
                manufacturer: abc123
                price:
                  currency: EUR
                  gross: 119000
                  net: 100000
                  tax_rate: 1900
                product_standard_identifiers:
                - id: 123ab-4567
                  identifier_type: EAN
                seller_categories:
                - id: abc123
                  name: abc123
                  parent_category_id: abc123
                seller_product_references:
                - reference: 123ab-5343
                  source: sap
                - reference: 123ab-5343
                  source: sap
                seller_product_type: software
                shop_product_description_url: https://example.com/foo
                subtitle: abc123
                title: abc123
              - base_rental_price:
                  currency: EUR
                  gross: 119000
                  net: 100000
                description: aaa
                extra_details:
                - property: memory
                  value: 16GB DDR5
                image:
                  url: https://example.com/foo
                is_active: false
                manufacturer: abc123
                price:
                  currency: EUR
                  gross: 119000
                  net: 100000
                  tax_rate: 1900
                product_standard_identifiers:
                - id: 123ab-4567
                  identifier_type: EAN
                seller_categories:
                - id: abc123
                  name: abc123
                  parent_category_id: abc123
                seller_product_references:
                - reference: 123ab-5343
                  source: sap
                - reference: 123ab-5343
                  source: sap
                seller_product_type: software
                shop_product_description_url: https://example.com/foo
                subtitle: abc123
                title: abc123
      responses:
        '200':
          description: OK response.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ImportResult'
              example:
                id: 739b63c2-9e58-4964-b38d-4ebb424de242
                status: started
                summary:
                  sample_products_rejected:
                  - error_code: unsupported_product
                    error_description: the product type is not supported
                    seller_product_reference:
                      reference: 123ab-5343
                      source: sap
                  total_products: 1
                  total_products_imported: 1
                  total_products_rejected: 1
        '401':
          description: 'Unauthorized: Unauthorized response.'
          content:
            application/json:
              schema:
                type: string
                example: abc123
              example: abc123
        '403':
          description: 'InvalidScopes: Forbidden response.'
          content:
            application/json:
              schema:
                type: string
                example: abc123
              example: abc123
        '413':
          description: 'TooManyProducts: Request Entity Too Large response.'
          content:
            application/vnd.goa.error:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: 'Unprocessable: Unprocessable Entity response.'
          content:
            application/vnd.goa.error:
              schema:
                $ref: '#/components/schemas/Error'
      security:
      - OAuth2Seller_header_Authorization:
        - seller-catalog:edit
      x-code-samples:
      - lang: curl
        label: cURL
        source: "curl -X POST https://seller-api.topi.eu/v1/catalog/import \\\n  -H \"Authorization: Bearer $ACCESS_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n  \"products\": [\n    {\n      \"base_rental_price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000\n      },\n      \"description\": \"aaa\",\n      \"extra_details\": [\n        {\n          \"property\": \"memory\",\n          \"value\": \"16GB DDR5\"\n        }\n      ],\n      \"image\": {\n        \"url\": \"https://example.com/foo\"\n      },\n      \"is_active\": false,\n      \"manufacturer\": \"abc123\",\n      \"price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000,\n        \"tax_rate\": 1900\n      },\n      \"product_standard_identifiers\": [\n        {\n          \"id\": \"123ab-4567\",\n          \"identifier_type\": \"EAN\"\n        }\n      ],\n      \"seller_categories\": [\n        {\n          \"id\": \"abc123\",\n          \"name\": \"abc123\",\n          \"parent_category_id\": \"abc123\"\n        }\n      ],\n      \"seller_product_references\": [\n        {\n          \"reference\": \"123ab-5343\",\n          \"source\": \"sap\"\n        },\n        {\n          \"reference\": \"123ab-5343\",\n          \"source\": \"sap\"\n        }\n      ],\n      \"seller_product_type\": \"software\",\n      \"shop_product_description_url\": \"https://example.com/foo\",\n      \"subtitle\": \"abc123\",\n      \"title\": \"abc123\"\n    },\n    {\n      \"base_rental_price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000\n      },\n      \"description\": \"aaa\",\n      \"extra_details\": [\n        {\n          \"property\": \"memory\",\n          \"value\": \"16GB DDR5\"\n        }\n      ],\n      \"image\": {\n        \"url\": \"https://example.com/foo\"\n      },\n      \"is_active\": false,\n      \"manufacturer\": \"abc123\",\n      \"price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000,\n        \"tax_rate\": 1900\n      },\n      \"product_standard_identifiers\": [\n        {\n          \"id\": \"123ab-4567\",\n          \"identifier_type\": \"EAN\"\n        }\n      ],\n      \"seller_categories\": [\n        {\n          \"id\": \"abc123\",\n          \"name\": \"abc123\",\n          \"parent_category_id\": \"abc123\"\n        }\n      ],\n      \"seller_product_references\": [\n        {\n          \"reference\": \"123ab-5343\",\n          \"source\": \"sap\"\n        },\n        {\n          \"reference\": \"123ab-5343\",\n          \"source\": \"sap\"\n        }\n      ],\n      \"seller_product_type\": \"software\",\n      \"shop_product_description_url\": \"https://example.com/foo\",\n      \"subtitle\": \"abc123\",\n      \"title\": \"abc123\"\n    }\n  ]\n}'\n"
      - lang: javascript
        label: JavaScript (fetch)
        source: "const response = await fetch('https://seller-api.topi.eu/v1/catalog/import', {\n  method: 'POST',\n  headers: {\n    'Authorization': `Bearer ${ACCESS_TOKEN}`,\n    'Content-Type': 'application/json'\n  },\n  body: JSON.stringify({\n  \"products\": [\n    {\n      \"base_rental_price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000\n      },\n      \"description\": \"aaa\",\n      \"extra_details\": [\n        {\n          \"property\": \"memory\",\n          \"value\": \"16GB DDR5\"\n        }\n      ],\n      \"image\": {\n        \"url\": \"https://example.com/foo\"\n      },\n      \"is_active\": false,\n      \"manufacturer\": \"abc123\",\n      \"price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000,\n        \"tax_rate\": 1900\n      },\n      \"product_standard_identifiers\": [\n        {\n          \"id\": \"123ab-4567\",\n          \"identifier_type\": \"EAN\"\n        }\n      ],\n      \"seller_categories\": [\n        {\n          \"id\": \"abc123\",\n          \"name\": \"abc123\",\n          \"parent_category_id\": \"abc123\"\n        }\n      ],\n      \"seller_product_references\": [\n        {\n          \"reference\": \"123ab-5343\",\n          \"source\": \"sap\"\n        },\n        {\n          \"reference\": \"123ab-5343\",\n          \"source\": \"sap\"\n        }\n      ],\n      \"seller_product_type\": \"software\",\n      \"shop_product_description_url\": \"https://example.com/foo\",\n      \"subtitle\": \"abc123\",\n      \"title\": \"abc123\"\n    },\n    {\n      \"base_rental_price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000\n      },\n      \"description\": \"aaa\",\n      \"extra_details\": [\n        {\n          \"property\": \"memory\",\n          \"value\": \"16GB DDR5\"\n        }\n      ],\n      \"image\": {\n        \"url\": \"https://example.com/foo\"\n      },\n      \"is_active\": false,\n      \"manufacturer\": \"abc123\",\n      \"price\": {\n        \"currency\": \"EUR\",\n        \"gross\": 119000,\n        \"net\": 100000,\n        \"tax_rate\": 1900\n      },\n      \"product_standard_identifiers\": [\n        {\n          \"id\": \"123ab-4567\",\n          \"identifier_type\": \"EAN\"\n        }\n      ],\n      \"seller_categories\": [\n        {\n          \"id\": \"abc123\",\n          \"name\": \"abc123\",\n          \"parent_category_id\": \"abc123\"\n        }\n      ],\n      \"seller_product_references\": [\n        {\n          \"reference\": \"123ab-5343\",\n          \"source\": \"sap\"\n        },\n        {\n          \"reference\": \"123ab-5343\",\n          \"source\": \"sap\"\n        }\n      ],\n      \"seller_product_type\": \"software\",\n      \"shop_product_description_url\": \"https://example.com/foo\",\n      \"subtitle\": \"abc123\",\n      \"title\": \"abc123\"\n    }\n  ]\n})\n});\n\nconst data = await response.json();\nconsole.log(data);\n"
  /v1/catalog/imports:
    post:
      tags:
      - catalog
      summary: Create a CSV import job
      description: "Creates a new CSV import job and returns the created import id and a pre-signed upload URL.\n\n## Upload flow\n\n1. Call `POST /imports` with the `filename` of your CSV file. The response contains the import\n   `id` and an `upload_url` — a temporary link to upload the file to.\n2. Upload the file with an HTTP `PUT` request to `upload_url`. The request must include two\n   headers: `Content-Type: text/csv` and `x-goog-content-length-range: 0,262144000`. Uploads\n   without them are rejected. The file may be at most **250 MB**.\n3. The file is then checked and processed in the background. Call `GET /imports/{id}` to follow\n   progress. When some rows could not be imported, the response links to a downloadable CSV\n   listing each failed row and the reason. If the file fails the initial check (for example a\n   required column is missing), the import status becomes `failed` and the `error` field\n   explains why.\n\nA seller can have at most **5 imports running** at the same time. Starting a sixth returns a\n`TooManyRequests` error — wait for an earlier import to finish and try again.\n\n## CSV format\n\nThe first line of the file must be a header row with column names. Column names are not\ncase-sensitive and surrounding spaces are ignored; any column not listed below is simply skipped.\n\nRe-uploading a product you imported before (same `reference`) updates that product instead of\ncreating a duplicate. Leaving an optional cell empty on re-import keeps the product's existing\nvalue for that field.\n\n### Required columns\n\nThe import is rejected if any of these are missing from the header.\n\n| Column | Description | Format |\n|---|---|---|\n| `title` | Product name shown to customers | Non-empty text |\n| `reference` | Your product identifier(s) | One or more values joined by `\\|`; count must match `reference_source` |\n| `reference_source` | Source/type of each reference (e.g. `sku`, `ean`) | `\\|`-separated, same count as `reference` |\n| `is_active` | Whether the product is sellable | `true`/`false`, `1`/`0`, `yes`/`no`, `y`/`n` (case-insensitive) |\n| `price_gross` | Sale price incl. VAT | Number > 0, must be >= `price_net` |\n| `price_net` | Sale price excl. VAT | Number > 0 |\n\n### Optional columns\n\n| Column | Description | Format |\n|---|---|---|\n| `currency` | Currency code, e.g. `EUR` | Defaults to the seller currency if blank |\n| `manufacturer` | Brand / maker | Text |\n| `subtitle` | Short tagline under the title | Text |\n| `description` | Long product description | Text, max 2000 characters |\n| `base_rental_price_gross` | Monthly rental price incl. VAT | Number > 0, must be >= net if both set |\n| `base_rental_price_net` | Monthly rental price excl. VAT | Number > 0 |\n| `ean` | EAN barcode | Text |\n| `mpn` | Manufacturer part number | Text |\n| `image_url` | Product image | Valid URL |\n| `seller_category_id` | Your category ID | Text |\n| `seller_category_name` | Your category name | Text |\n| `seller_category_parent_id` | Parent category ID | Text |\n| `seller_product_type` | Product type | One of `hardware`, `software`, `service`, `hardware_built_to_order`, or blank |\n| `shop_product_description_url` | Link to the product page on your shop | Valid URL |\n| `extra_details` | Custom key/value attributes | `key=value` pairs joined by `\\|` |\n\n### Prices\n\n- Prices are written in whole currency units, not cents: `2499.00` means 2,499 euros.\n- `price_gross` (with VAT) must be greater than or equal to `price_net` (without VAT).\n- Both decimal styles are accepted: a point (`1999.99`) or a comma (`1999,99`) before the\n  decimals. Thousands separators are also fine in either style: `1,234.56` and `1.234,56` both\n  mean one thou

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