Pleo Vendors API

Vendor registry API for creating, updating, activating, archiving, and bulk-importing suppliers via CSV with presigned-URL file upload support.

OpenAPI Specification

pleo-vendors-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Vendors API
  description: Vendors OpenAPI definitions
  termsOfService: https://pleo.io/terms/
  contact:
    email: [email protected]
  license:
    name: Apache 2.0
    url: http://www.apache.org/licenses/LICENSE-2.0.html
  version: 34.17.0
servers:
- url: https://external.pleo.io
  description: Production server
- url: https://external.staging.pleo.io
  description: Staging server
security:
- bearerAuth: []
- basicAuth: []
tags:
- name: health
- name: admin
- name: Aggregated Company Vendor Resource
- name: Company Recurring Vendor Resource
- name: Company Vendor Resource
- name: Enablement Resource
- name: Expense Vendor Resource
- name: Generic Vendors Resource
- name: Prompts Resource
- name: Recurring Vendor Resource
- name: Sandbox Resource
- name: Supplier Resource
- name: Vendor Clean Resource
- name: Vendor Group Resource
- name: Vendor Resource
- name: Vendors Resource
- name: Vendor API
  description: 'The Vendor API enables you to perform the following:

    - Create a new vendor record.

    - Retrieve a vendor record by ID.

    - Modify the vendor details.

    - Archive a vendor record by ID.

    - Activate a vendor record by ID.

    - Fetch vendors'' details by search criteria.

    - Import vendors via CSV.'
- name: Recurring Merchant Info Resource
- name: Vendor Clean Resource V2
paths:
  /v1/vendors:
    post:
      tags:
      - external-vendors
      summary: Create a New Vendor
      description: 'This endpoint has the following functions:

        - Create a corresponding record in Pleo for any new vendor created in the
        ERP/accounting system.

        - Create a new vendor in Pleo, without the record yet existing in the ERP/accounting
        system.'
      operationId: postVendor
      requestBody:
        content:
          application/json;charset=UTF-8:
            schema:
              $ref: '#/components/schemas/VendorCreateRequest'
        required: true
      responses:
        '201':
          description: New vendor created
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/DataResponseVendorResponse'
        '409':
          description: Vendor already exists
  /v1/vendors/csv-import/jobs:
    post:
      tags:
      - external-vendors
      summary: Create an import job
      operationId: createCsvImportJobV1
      requestBody:
        content:
          application/json;charset=UTF-8:
            schema:
              $ref: '#/components/schemas/CreateCsvImportJobRequestV1'
        required: true
      responses:
        '201':
          description: Successfully created import job
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/DataResponseCsvImportJobV1'
        '400':
          description: Bad request
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: VALIDATION_FAILED
                message: Validation failed for request parameters
        '500':
          description: Processing failed. Returned if there was an internal error
            creating the import job.
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: PROCESSING_FAILED
                message: Failed to create CSV import job
      x-exclude: 'true'
  /v1/vendors/csv-import/jobs/{jobId}:
    get:
      tags:
      - external-vendors
      summary: Get CSV import job details
      operationId: getCsvImportJobV1
      parameters:
      - name: jobId
        in: path
        description: ID of the import job to retrieve.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
        example: 123e4567-e89b-12d3-a456-426614174015
      responses:
        '200':
          description: Import job retrieved successfully
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/DataResponseCsvImportJobV1'
        '400':
          description: Invalid path parameter
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: PARAMETER_VALIDATION_FAILED
                message: Validation failed for path parameters
        '404':
          description: CSV import job not found
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: IMPORT_JOB_NOT_FOUND
                message: CSV import job with ID 123e4567-e89b-12d3-a456-426614174000
                  not found
      x-exclude: 'true'
  /v1/vendors/csv-import/jobs/{jobId}/errors:
    get:
      tags:
      - external-vendors
      summary: Get import job errors
      operationId: getCsvImportJobErrorsV1
      parameters:
      - name: before
        in: query
        description: Lower bound of the page of data to return (cannot be used together
          with [after] or [offset]).
        required: false
        style: form
        explode: true
        schema:
          pattern: ^[A-Z2-7=~]+$
          type: string
      - name: after
        in: query
        description: Upper bound of the page of data to return (cannot be used together
          with [before] or [offset]).
        required: false
        style: form
        explode: true
        schema:
          pattern: ^[A-Z2-7=~]+$
          type: string
      - name: offset
        in: query
        description: Offset of the page of data to return (cannot be used together
          with [before] or [after]).
        required: false
        style: form
        explode: true
        schema:
          type: integer
          format: int64
      - name: limit
        in: query
        description: The maximum amount of items to return.
        required: false
        style: form
        explode: true
        schema:
          type: integer
          format: int32
      - name: sorting_keys
        in: query
        description: The keys to sort the results by.
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: sorting_order
        in: query
        description: The order to sort the results by. Must be the same length as
          [sortingKeys]; one order per key.
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            $ref: '#/components/schemas/PageOrder'
      - name: jobId
        in: path
        description: ID of the import job to retrieve errors for.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
        example: 123e4567-e89b-12d3-a456-426614174015
      responses:
        '200':
          description: Import job errors retrieved successfully
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/CursorPaginatedResponseCsvRowImportErrorV1'
        '400':
          description: Invalid path parameter
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: PARAMETER_VALIDATION_FAILED
                message: Validation failed for path parameters
        '404':
          description: CSV import job not found
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: IMPORT_JOB_NOT_FOUND
                message: CSV import job with ID 123e4567-e89b-12d3-a456-426614174000
                  not found
      x-exclude: 'true'
  /v1/vendors/csv-import/jobs/{jobId}/metadata:
    put:
      tags:
      - external-vendors
      summary: Update metadata for CSV import job
      operationId: updateCsvImportJobMetadataV1
      parameters:
      - name: jobId
        in: path
        description: ID of the import job to update.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
        example: 123e4567-e89b-12d3-a456-426614174015
      requestBody:
        content:
          application/json;charset=UTF-8:
            schema:
              $ref: '#/components/schemas/UpdateMetadataRequestV1'
        required: true
      responses:
        '200':
          description: Import job updated successfully
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/DataResponseCsvImportJobV1'
        '400':
          description: Invalid request body
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: JSON_MAPPING_EXCEPTION
                message: Validation failed for request body
        '404':
          description: CSV import job not found
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: IMPORT_JOB_NOT_FOUND
                message: CSV import job with ID 123e4567-e89b-12d3-a456-426614174000
                  not found
        '500':
          description: Processing failed
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: PROCESSING_FAILED
                message: 'Failed to update metadata for CSV import job with ID: 123e4567-e89b-12d3-a456-426614174000'
      x-exclude: 'true'
  /v1/vendors/csv-import/jobs/{jobId}/status:
    put:
      tags:
      - external-vendors
      summary: Update status for CSV import job
      operationId: updateCsvImportJobStatusV1
      parameters:
      - name: jobId
        in: path
        description: ID of the import job to update.
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
        example: 123e4567-e89b-12d3-a456-426614174015
      requestBody:
        content:
          application/json;charset=UTF-8:
            schema:
              $ref: '#/components/schemas/UpdateStatusRequestV1'
        required: true
      responses:
        '200':
          description: Import job updated successfully
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/DataResponseCsvImportJobV1'
        '400':
          description: Invalid request body
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: JSON_MAPPING_EXCEPTION
                message: Validation failed for request body
        '404':
          description: CSV import job not found
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: IMPORT_JOB_NOT_FOUND
                message: CSV import job with ID 123e4567-e89b-12d3-a456-426614174000
                  not found
        '500':
          description: Processing failed
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: PROCESSING_FAILED
                message: 'Failed to update status for CSV import job with ID: 123e4567-e89b-12d3-a456-426614174000'
      x-exclude: 'true'
  /v1/vendors/csv-import/jobs/{jobId}:get-presigned-url:
    post:
      tags:
      - external-vendors
      summary: Get presigned URL for file upload
      operationId: getCsvImportJobPresignedUrlV1
      parameters:
      - name: jobId
        in: path
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: S3 presigned URL generated successfully
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/DataResponsePresignedUrlV1'
        '400':
          description: Invalid path parameter
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: PARAMETER_VALIDATION_FAILED
                message: Validation failed for path parameters
        '404':
          description: CSV import job not found
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: IMPORT_JOB_NOT_FOUND
                message: CSV import job with ID 123e4567-e89b-12d3-a456-426614174000
                  not found
        '500':
          description: Processing failed
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: PROCESSING_FAILED
                message: 'Failed to update S3 key for CSV import job with ID: 123e4567-e89b-12d3-a456-426614174000'
      x-exclude: 'true'
  /v1/vendors/csv-import/jobs/{jobId}:run:
    post:
      tags:
      - external-vendors
      summary: Run import job
      operationId: runCsvImportJobV1
      parameters:
      - name: jobId
        in: path
        required: true
        style: simple
        explode: false
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: Processing started
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/DataResponseCsvImportJobV1'
        '400':
          description: Invalid path parameter
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: PARAMETER_VALIDATION_FAILED
                message: Validation failed for path parameters
        '404':
          description: Import job not found (thrown during background processing)
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: IMPORT_JOB_NOT_FOUND
                message: CSV import job with ID 123e4567-e89b-12d3-a456-426614174000
                  not found
        '409':
          description: Invalid status transition (thrown during background processing)
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: INVALID_STATUS_TRANSITION
                message: Cannot process CSV job in status COMPLETED. Job must be in
                  QUEUED or PROCESSING status.
      x-exclude: 'true'
  /v1/vendors/csv-import/jobs:search:
    post:
      tags:
      - external-vendors
      summary: Search CSV import jobs by filter
      operationId: searchCsvImportJobsV1
      parameters:
      - name: before
        in: query
        description: Lower bound of the page of data to return (cannot be used together
          with [after] or [offset]).
        required: false
        style: form
        explode: true
        schema:
          pattern: ^[A-Z2-7=~]+$
          type: string
      - name: after
        in: query
        description: Upper bound of the page of data to return (cannot be used together
          with [before] or [offset]).
        required: false
        style: form
        explode: true
        schema:
          pattern: ^[A-Z2-7=~]+$
          type: string
      - name: offset
        in: query
        description: Offset of the page of data to return (cannot be used together
          with [before] or [after]).
        required: false
        style: form
        explode: true
        schema:
          type: integer
          format: int64
      - name: limit
        in: query
        description: The maximum amount of items to return.
        required: false
        style: form
        explode: true
        schema:
          type: integer
          format: int32
      - name: sorting_keys
        in: query
        description: The keys to sort the results by.
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: sorting_order
        in: query
        description: The order to sort the results by. Must be the same length as
          [sortingKeys]; one order per key.
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            $ref: '#/components/schemas/PageOrder'
      - name: company_id
        in: query
        description: Only return CSV import jobs for the given company Id.
        required: true
        style: form
        explode: true
        schema:
          type: string
          format: uuid
        example: 123e4567-e89b-12d3-a456-426614174015
      requestBody:
        content:
          application/json;charset=UTF-8:
            schema:
              $ref: '#/components/schemas/SearchCsvImportJobsRequestV1'
        required: true
      responses:
        '200':
          description: Returning search results
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/CursorPaginatedResponseCsvImportJobV1'
        '400':
          description: Bad request
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/ExceptionInfo'
              example:
                type: VALIDATION_FAILED
                message: Validation failed for search query
      x-exclude: 'true'
  /v1/vendors/{id}:
    get:
      tags:
      - external-vendors
      summary: Retrieves a Vendor in Pleo by its id
      description: Retrieves a Vendor in Pleo by its id.
      operationId: getVendorById
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        explode: false
        schema:
          type: string
          description: Enter the specific vendor ID of the record that you want to
            view in detail.
          format: uuid
          example: 123e4567-e89b-12d3-a456-426614174000
      responses:
        '200':
          description: Fetches vendor by id
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/DataResponseVendorResponse'
        '404':
          description: Vendor not found
    put:
      tags:
      - external-vendors
      summary: Update a Vendor
      description: Updates a Vendor for a company in Pleo.
      operationId: updateVendor
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        explode: false
        schema:
          type: string
          description: Pleo's internal identifier of the vendor.
          format: uuid
          example: 123e4567-e89b-12d3-a456-426614174000
      requestBody:
        content:
          application/json;charset=UTF-8:
            schema:
              $ref: '#/components/schemas/VendorUpdateRequest'
        required: true
      responses:
        '200':
          description: Vendor updated
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/DataResponseVendorResponse'
        '400':
          description: Invalid vendor update request
        '404':
          description: Vendor not found
        '409':
          description: Conflicting vendor update
  /v1/vendors/{id}:activate:
    post:
      tags:
      - external-vendors
      summary: Activate a Vendor
      description: Updates the vendor state to Active, reflecting its availability
        in the target ERP/accounting system
      operationId: activateVendor
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        explode: false
        schema:
          type: string
          description: Pleo's internal identifier of the vendor.
          format: uuid
          example: 123e4567-e89b-12d3-a456-426614174000
      requestBody:
        content:
          application/json;charset=UTF-8:
            schema:
              $ref: '#/components/schemas/ActivateVendorEventRequest'
        required: true
      responses:
        '204':
          description: Vendor activated
        '404':
          description: Vendor not found
  /v1/vendors/{id}:archive:
    post:
      tags:
      - external-vendors
      summary: Archive a Vendor
      description: Archives a Vendor in Pleo by its id.
      operationId: archiveVendorById
      parameters:
      - name: id
        in: path
        required: true
        style: simple
        explode: false
        schema:
          type: string
          description: Pleo's internal identifier of the vendor.
          format: uuid
          example: 123e4567-e89b-12d3-a456-426614174000
      responses:
        '204':
          description: Vendor archived
        '404':
          description: Vendor not found
  /v1/vendors:search:
    post:
      tags:
      - external-vendors
      summary: Fetches Vendors by search criteria
      description: Retrieves a list of vendors with filters. Results are paginated.
      operationId: searchVendors
      parameters:
      - name: company_id
        in: query
        required: true
        style: form
        explode: true
        schema:
          type: string
          description: Pleo's internal identifier for the company the Vendor is associated
            with.
          format: uuid
      - name: before
        in: query
        description: Lower bound of the page of data to return (cannot be used together
          with [after] or [offset]).
        required: false
        style: form
        explode: true
        schema:
          pattern: ^[A-Z2-7=~]+$
          type: string
      - name: after
        in: query
        description: Upper bound of the page of data to return (cannot be used together
          with [before] or [offset]).
        required: false
        style: form
        explode: true
        schema:
          pattern: ^[A-Z2-7=~]+$
          type: string
      - name: offset
        in: query
        description: Offset of the page of data to return (cannot be used together
          with [before] or [after]).
        required: false
        style: form
        explode: true
        schema:
          type: integer
          format: int64
      - name: limit
        in: query
        description: The maximum amount of items to return.
        required: false
        style: form
        explode: true
        schema:
          type: integer
          format: int32
      - name: sorting_keys
        in: query
        description: The keys to sort the results by.
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            type: string
      - name: sorting_order
        in: query
        description: The order to sort the results by. Must be the same length as
          [sortingKeys]; one order per key.
        required: false
        style: form
        explode: true
        schema:
          type: array
          items:
            $ref: '#/components/schemas/PageOrder'
      requestBody:
        content:
          application/json;charset=UTF-8:
            schema:
              $ref: '#/components/schemas/VendorSearchRequestV1'
      responses:
        '200':
          description: Fetches vendors by search criteria
          content:
            application/json;charset=UTF-8:
              schema:
                $ref: '#/components/schemas/CursorPaginatedResponseVendorResponse'
components:
  schemas:
    ActivateVendorEventRequest:
      required:
      - externalId
      type: object
      properties:
        code:
          type: string
          description: Account code assigned to the vendor in the target ERP/accounting
            system for aiding users in identifying the correct record.
        externalId:
          type: string
          description: Unique external identifier of the vendor, assigned by the target
            ERP/accounting system, used by the client for identification. Can be the
            same as code if no other identifier is available.
      description: The request containing the acknowledgement of the vendor creation
        in the target ERP/accounting system
    CountryCode:
      type: string
      description: Country of registration of the Vendor (ISO 3166-1 alpha-2 country
        code (2 letters))
      example: DK
      enum:
      - UNDEFINED
      - AC
      - AD
      - AE
      - AF
      - AG
      - AI
      - AL
      - AM
      - AN
      - AO
      - AQ
      - AR
      - AS
      - AT
      - AU
      - AW
      - AX
      - AZ
      - BA
      - BB
      - BD
      - BE
      - BF
      - BG
      - BH
      - BI
      - BJ
      - BL
      - BM
      - BN
      - BO
      - BQ
      - BR
      - BS
      - BT
      - BU
      - BV
      - BW
      - BY
      - BZ
      - CA
      - CC
      - CD
      - CF
      - CG
      - CH
      - CI
      - CK
      - CL
      - CM
      - CN
      - CO
      - CP
      - CR
      - CS
      - CU
      - CV
      - CW
      - CX
      - CY
      - CZ
      - DE
      - DG
      - DJ
      - DK
      - DM
      - DO
      - DZ
      - EA
      - EC
      - EE
      - EG
      - EH
      - ER
      - ES
      - ET
      - EU
      - EZ
      - FI
      - FJ
      - FK
      - FM
      - FO
      - FR
      - FX
      - GA
      - GB
      - GD
      - GE
      - GF
      - GG
      - GH
      - GI
      - GL
      - GM
      - GN
      - GP
      - GQ
      - GR
      - GS
      - GT
      - GU
      - GW
      - GY
      - HK
      - HM
      - HN
      - HR
      - HT
      - HU
      - IC
      - ID
      - IE
      - IL
      - IM
      - IN
      - IO
      - IQ
      - IR
      - IS
      - IT
      - JE
      - JM
      - JO
      - JP
      - KE
      - KG
      - KH
      - KI
      - KM
      - KN
      - KP
      - KR
      - KW
      - KY
      - KZ
      - LA
      - LB
      - LC
      - LI
      - LK
      - LR
      - LS
      - LT
      - LU
      - LV
      - LY
      - MA
      - MC
      - MD
      - ME
      - MF
      - MG
      - MH
      - MK
      - ML
      - MM
      - MN
      - MO
      - MP
      - MQ
      - MR
      - MS
      - MT
      - MU
      - MV
      - MW
      - MX
      - MY
      - MZ
      - NA
      - NC
      - NE
      - NF
      - NG
      - NI
      - NL
      - 'NO'
      - NP
      - NR
      - NT
      - NU
      - NZ
      - OM
      - PA
      - PE
      - PF
      - PG
      - PH
      - PK
      - PL
      - PM
      - PN
      - PR
      - PS
      - PT
      - PW
      - PY
      - QA
      - RE
      - RO
      - RS
      - RU
      - RW
      - SA
      - SB
      - SC
      - SD
      - SE
      - SF
      - SG
      - SH
      - SI
      - SJ
      - SK
      - SL
      - SM
      - SN
      - SO
      - SR
      - SS
      - ST
      - SU
      - SV
      - SX
      - SY
      - SZ
      - TA
      - TC
      - TD
      - TF
      - TG
      - TH
      - TJ
      - TK
      - TL
      - TM
      - TN
      - TO
      - TP
      - TR
      - TT
      - TV
      - TW
      - TZ
      - UA
      - UG
      - UK
      - UM
      - US
      - UY
      - UZ
      - VA
      - VC
      - VE
      - VG
      - VI
      - VN
      - VU
      - WF
      - WS
      - XI
      - XU
      - XK
      - YE
      - YT
      - YU
      - ZA
      - ZM
      - ZR
      - ZW
    CreateCsvImportJobRequestV1:
      required:
      - companyId
      - originalFilename
      - type
      type: object
      properties:
        companyId:
          type: string
          description: Unique identifier for the company.
          format: uuid
        csvFormat:
          $ref: '#/components/schemas/CsvFormatV1'
        metadata:
          type: object
          additionalProperties:
            type: object
            description: Place for API users to store flexible data. The value provided
              in this field will be passed to consuming service for every CSV row
              along with the parsed data.
          description: Place for API users to store flexible data. The value provided
            in this field will be passed to consuming service for every CSV row along
            with the parsed data.
        originalFilename:
          minLength: 1
          type: string
          description: Original filename of the uploaded CSV file.
          example: vendors.csv
        type:
          minLength: 1
          type: string
          description: Type of CSV import job.
          example: vendors
    CsvFormatV1:
      required:
      - delimiter
      - ignoreEmptyLines
      - recordSeparator
      - skipHeaderRecord
      type: object
      properties:
        delimiter:
          type: string
          description: Values delimiter.
          example: ','
        escapeCharacter:
          type: string
          description: Character used for escaping special characters.
          example: \
        ignoreEmptyLines:
          type: boolean
          description: Whether to ignore empty lines in the CSV file.
          example: true
        quoteCharacter:
          type: string
          description: Character used for quoting values.
          example: '"'
        recordSeparator:
          type: string
          description: Record separator.
          example: ''
        skipHeaderRecord:
          type: boolean
          description: Whether to skip the first record as a header.
          example: true
      description: CSV format configuration including delimiter, quote character,
        and other parsing options. If not provided for a CSV import job, the parser
        will try to guess it based on the actual data in the file.
      example:
        delimiter: ','
        quoteCharacter: '"'
        escapeCharacter: \
        recordSeparator: '

          '
        ignoreEmptyLines: true
        skipHeaderRecord: true
    CsvImportErrorTypeV1:
      type: string
      enum:
      - INVALID_FILE_FORMAT
      - FILE_TOO_LARGE
      - FILE_TOO_SMALL
      - FILE_TYPE_NOT_SUPPORTED
      - FILE_EXTENSION_NOT_SUPPORTED
      - IMPORT_JOB_NOT_FOUND
      - INVALID_STATUS_TRANSITION
      - PROCESSING_FAILED
    CsvImportJobStatusV1:
      type: string
      description: Status of CSV import job.
      enum:
      - UPLOAD_INITIATED
      - UPLOADED
      - READY_FOR_IMPORT
      - QUEUED
      - PROCESSING
      - COMPLETED
      - FAILED
    CsvImportJobV1:
      required:
      - companyId
      - createdAt
      - id
      - status
      - type
      - updatedAt
      type: object
      properties:
        columnNames:
          type: array
          description: List of column names from the CSV file.
          example:
          - Konto
          - Name
          - USt-IdNr.
          items:
            type: string
            description: List of column names from the CSV file.
            example: '["Konto","Name","USt-IdNr."]'
        companyId:
          type: string
          description: Unique identifier for the company.
          format: uuid
        createdAt:
          type: string
          description: Timestamp when the import job was created.
          format: date-time
        csvFormat:
          $ref: '#/components/schemas/CsvFormatV1'
        error

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