> ## Documentation Index
> Fetch the complete documentation index at: https://docs.voucherify.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Import Products using CSV

> Import products into the repository using a CSV file.

The CSV file has to include headers in the first line.



> 📘 Standard product fields mapping
>
> - Create a **comma separated value (CSV) file** or download our CSV import template. You can find an example template [here](https://s3.amazonaws.com/helpscout.net/docs/assets/5902f1c12c7d3a057f88a36d/attachments/627b82ed68d51e779443f550/Import_products_template.csv).
> - Supported CSV file headers: `name,source_id,price,attributes,image_url,Metadata_property_name`
> - **Name** is a **required** field. The remaining fields in the CSV template are optional.
> - Override/Update products' **names** in Voucherify using this method. Data will be updated for each product included in the CSV file whose **source_id** matches a source ID in Voucherify. No other data can be updated other than the product name.
> - Note that dates and date-time attributes need to be provided in compliance with the **ISO 8601 standard**. For example, 2022-03-11T09:00:00.000Z or 2022-03-11
>    - `YYYY-MM-DD`
>    - `YYYY-MM-DDTHH`
>    - `YYYY-MM-DDTHH:mm`
>    - `YYYY-MM-DDTHH:mm:ss`
>    - `YYYY-MM-DDTHH:mm:ssZ`
>    - `YYYY-MM-DDTHH:mm:ssZ`
>    - `YYYY-MM-DDTHH:mm:ss.SSSZ`
> - Columns that cannot be mapped to standard fields, will be mapped to **Custom attributes** and added as **products' metadata**. There is no limit on the number of custom attributes that you can import as metadata. 
> - To provide the proper data type, you need to add all custom attributes to the metadata schema **before importing the file**. Read more [here](/prepare/metadata#add-metadata).
> - **Product attributes** (not custom attributes) need to be separated by a comma and enclosed in double quotes, i.e "attribute1,attribute2".
> - Headers with metadata names **can't contain white-space characters**.
> - If you import metadata defined in the schema as **arrays (multiple)**, you need to separate each value using a comma, for example:  
>    - array of strings: "subscribed,premium"  
>    - array of numbers: "123,234". 
>    - array of dates: "2000-01-01,2000-01-02"

This API request starts a process that affects Voucherify data in bulk. 

In case of small jobs (like bulk update) the request is put into a queue and processed once every other bulk request placed in the queue prior to this request is finished. However, when the job takes a longer time (like vouchers generation) then it is processed in small portions in a round-robin fashion. When there is a list of vouchers generation scheduled, then they will all have the `IN_PROGRESS` status shortly. This way, small jobs added just after scheduling big jobs of the same type will be processed in a short time window. 

The result will return the async ID. You can verify the status of your request via this [API request](/api-reference/async-actions/get-async-action).



## OpenAPI

````yaml /openapi/products.json post /v1/products/importCSV
openapi: 3.0.1
info:
  title: Voucherify API - Products
  version: v2018-08-01
  description: >-
    Voucherify promotion engine REST API. Please see
    https://docs.voucherify.io/docs for more details.
  contact:
    name: Voucherify Team
    url: https://www.voucherify.io/contact-support
    email: support@voucherify.io
  termsOfService: https://www.voucherify.io/legal/subscription-agreement
  license:
    name: MIT
    url: https://github.com/voucherifyio/voucherify-js-sdk/blob/main/LICENSE
servers:
  - url: https://{cluster}.voucherify.io
    description: Base URL
    variables:
      cluster:
        default: api
        enum:
          - api
          - us1.api
          - as1.api
          - download
          - us1.download
          - as1.download
security: []
paths:
  /v1/products/importCSV:
    post:
      tags:
        - Products
      summary: Import Products using CSV
      description: >-
        Import products into the repository using a CSV file.


        The CSV file has to include headers in the first line.




        > 📘 Standard product fields mapping

        >

        > - Create a **comma separated value (CSV) file** or download our CSV
        import template. You can find an example template
        [here](https://s3.amazonaws.com/helpscout.net/docs/assets/5902f1c12c7d3a057f88a36d/attachments/627b82ed68d51e779443f550/Import_products_template.csv).

        > - Supported CSV file headers:
        `name,source_id,price,attributes,image_url,Metadata_property_name`

        > - **Name** is a **required** field. The remaining fields in the CSV
        template are optional.

        > - Override/Update products' **names** in Voucherify using this method.
        Data will be updated for each product included in the CSV file whose
        **source_id** matches a source ID in Voucherify. No other data can be
        updated other than the product name.

        > - Note that dates and date-time attributes need to be provided in
        compliance with the **ISO 8601 standard**. For example,
        2022-03-11T09:00:00.000Z or 2022-03-11

        >    - `YYYY-MM-DD`

        >    - `YYYY-MM-DDTHH`

        >    - `YYYY-MM-DDTHH:mm`

        >    - `YYYY-MM-DDTHH:mm:ss`

        >    - `YYYY-MM-DDTHH:mm:ssZ`

        >    - `YYYY-MM-DDTHH:mm:ssZ`

        >    - `YYYY-MM-DDTHH:mm:ss.SSSZ`

        > - Columns that cannot be mapped to standard fields, will be mapped to
        **Custom attributes** and added as **products' metadata**. There is no
        limit on the number of custom attributes that you can import as
        metadata. 

        > - To provide the proper data type, you need to add all custom
        attributes to the metadata schema **before importing the file**. Read
        more [here](/prepare/metadata#add-metadata).

        > - **Product attributes** (not custom attributes) need to be separated
        by a comma and enclosed in double quotes, i.e "attribute1,attribute2".

        > - Headers with metadata names **can't contain white-space
        characters**.

        > - If you import metadata defined in the schema as **arrays
        (multiple)**, you need to separate each value using a comma, for
        example:  

        >    - array of strings: "subscribed,premium"  

        >    - array of numbers: "123,234". 

        >    - array of dates: "2000-01-01,2000-01-02"


        This API request starts a process that affects Voucherify data in bulk. 


        In case of small jobs (like bulk update) the request is put into a queue
        and processed once every other bulk request placed in the queue prior to
        this request is finished. However, when the job takes a longer time
        (like vouchers generation) then it is processed in small portions in a
        round-robin fashion. When there is a list of vouchers generation
        scheduled, then they will all have the `IN_PROGRESS` status shortly.
        This way, small jobs added just after scheduling big jobs of the same
        type will be processed in a short time window. 


        The result will return the async ID. You can verify the status of your
        request via this [API
        request](/api-reference/async-actions/get-async-action).
      operationId: import-products-using-csv
      parameters: []
      requestBody:
        description: The file path is stored in the form `file` header.
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/ProductsImportCSVRequestBody'
        required: true
      responses:
        '200':
          description: >-
            Returns ID of the scheduled async action. The response informs you
            that your request has been accepted and products will be added to
            the repository asynchronously. To check the import status and
            result, copy the `async_action_id` from the response and pass it
            using the [Get Async
            Action](/api-reference/async-actions/get-async-action) endpoint.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProductsImportCsvCreateResponseBody'
              examples:
                Async Action:
                  value:
                    async_action_id: aa_0a875d56c805df6601
        '400':
          description: >-
            Returns an invalid payload error. You may receive this error if you
            have incorrectly or have not specified the content type as
            `multipart/form-data` in the headers.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              examples:
                Invalid payload:
                  value:
                    code: 400
                    key: invalid_payload
                    message: Invalid payload
                    details: Payload should have required property 'file'
                    request_id: v-0c4c46bbad0136789f
      security:
        - X-App-Id: []
          X-App-Token: []
        - X-Voucherify-OAuth:
            - api
            - products
components:
  schemas:
    ProductsImportCSVRequestBody:
      type: object
      title: Products Import CSV Request Body
      description: Response body schema for **POST** `v1/products/importCSV`.
      allOf:
        - $ref: '#/components/schemas/ImportCSVRequestBody'
    ProductsImportCsvCreateResponseBody:
      type: object
      title: Products Import Csv Create Response Body
      description: Response body schema for **POST** `v1/products/importCSV`.
      allOf:
        - $ref: '#/components/schemas/AsyncActions'
    Error:
      title: Error Object
      type: object
      description: Error details
      properties:
        code:
          type: integer
          description: Error's HTTP status code.
        key:
          type: string
          description: Short string describing the kind of error which occurred.
        message:
          type: string
          description: A human-readable message providing a short description of the error.
        details:
          type: string
          description: A human-readable message providing more details about the error.
        request_id:
          type: string
          example: v-0a885062c80375740f
          description: >-
            This ID is useful when troubleshooting and/or finding the root cause
            of an error response by our support team.
        resource_id:
          type: string
          description: >-
            Unique resource ID that can be used in another endpoint to get more
            details.
          example: rf_0c5d710a87c8a31f86
        resource_type:
          type: string
          description: The resource type.
          example: voucher
        error:
          type: object
          description: Includes additional information about the error.
          properties:
            message:
              type: string
              description: The message configured by the user in a validation rule.
      required:
        - code
        - message
    ImportCSVRequestBody:
      type: object
      title: Import CSV file
      description: Request body schema for importing data using a CSV file.
      format: binary
      properties:
        file:
          type: string
          format: binary
          description: File path.
      required:
        - file
    AsyncActions:
      type: object
      title: Asynchronous Actions
      description: Response to requests that are processed asynchronously.
      properties:
        async_action_id:
          type: string
          example: aa_0a875d56c805df6601
          description: The ID of the scheduled asynchronous action.
      required:
        - async_action_id
  securitySchemes:
    X-App-Id:
      type: apiKey
      name: X-App-Id
      in: header
    X-App-Token:
      type: apiKey
      name: X-App-Token
      in: header
    X-Voucherify-OAuth:
      type: oauth2
      flows:
        implicit:
          authorizationUrl: https://api.voucherify.io/v1/oauth/token
          scopes:
            api: Gives access to whole server-side API.
            vouchers: >-
              Gives access to all endpoints and methods starting with
              `v1/vouchers`.
            client_api: Gives access to whole client-side API.
            client_vouchers: >-
              Gives access to all endpoints and methods starting with
              `/client/v1/vouchers`.
            promotions: >-
              Gives access to all endpoints and methods starting with
              `/v1/promotions`.
            client_promotions: >-
              Gives access to all endpoints and methods starting with
              `/client/v1/promotions`
            campaigns: >-
              Gives access to all endpoints and methods starting with
              `v1/campaigns`.
            client_publish: >-
              Gives access to all endpoints and methods starting with
              `/client/v1/publish`.
            exports: >-
              Gives access to all endpoints and methods starting with
              `/v1/exports`.
            publications: >-
              Gives access to all endpoints and methods starting with
              `/v1/publications`.
            client_validate: >-
              Gives access to all endpoints and methods starting with
              `/client/v1/validate`.
            validations: >-
              Gives access to all endpoints and methods starting with
              `/v1/validations`.
            client_validations: >-
              Gives access to all endpoints and methods starting with
              `/client/v1/validations`.
            qualifications: >-
              Gives access to all endpoints and methods starting with
              `/v1/qualifications`.
            client_qualifications: >-
              Gives access to all endpoints and methods starting with
              `/client/v1/qualifications`.
            client_redeem: >-
              Gives access to all endpoints and methods starting with
              `/client/v1/redeem
            redemptions: >-
              Gives access to all endpoints and methods starting with
              `/v1/redemptions`.
            client_redemptions: >-
              Gives access to all endpoints and methods starting with
              `/client/v1/redemptions`
            customers: >-
              Gives access to all endpoints and methods starting with
              `/v1/customers`.
            client_customers: >-
              Gives access to all endpoints and methods starting with
              `/client/v1/customers`.
            orders: >-
              Gives access to all endpoints and methods starting with
              `/v1/orders`.
            products: >-
              Gives access to all endpoints and methods starting with
              `/v1/products`.
            skus: >-
              Gives access to all endpoints and methods starting with
              `/v1/SKUs`.
            validation-rules: >-
              Gives access to all endpoints and methods starting with
              `/v1/validation-rules`.
            validation-rules-assignments: >-
              Gives access to all endpoints and methods starting with
              `/v1/validation-rules-assignments
            segments: >-
              Gives access to all endpoints and methods starting with
              `/v1/segments`.
            events: >-
              Gives access to all endpoints and methods starting with
              `/v1/events`.
            client_events: >-
              Gives access to all endpoints and methods starting with
              `client/v1/events`.
            rewards: >-
              Gives access to all endpoints and methods starting with
              `/v1/rewards`.
            assets: >-
              Gives access to all endpoints and methods starting with
              `/v1/assets`.
            task-results: >-
              Gives access to all endpoints and methods starting with
              `/v1/task-results`.
            loyalties: >-
              Gives access to all endpoints and methods starting with
              `/v1/loyalties`.
            client_consents: >-
              Gives access to all endpoints and methods starting with
              `client/v1/consents`.
            consents: >-
              Gives access to all endpoints and methods starting with
              `/v1/consents`.
            async-actions: >-
              Gives access to all endpoints and methods starting with
              `/v1/async-actions`.
            product-collections: >-
              Gives access to all endpoints and methods starting with
              `/v1/product-collections`.
            categories: >-
              Gives access to all endpoints and methods starting with
              `/v1/categories`.
            metadata-schemas: >-
              Gives access to all endpoints and methods starting with
              `/v1/metadata-schemas`.
            locations: >-
              Gives access to all endpoints and methods starting with
              `/v1/locations`.
            referrals: >-
              Gives access to all endpoints and methods starting with
              `/v1/referrals`.
            trash-bin: >-
              Gives access to all endpoints and methods starting with
              `/v1/trash-bin`.
            templates: >-
              Gives access to all endpoints and methods starting with
              `/v1/templates`.

````