OpenGov Vendor Imports API

The vendor-imports API from OpenGov — 7 operation(s) for vendor-imports.

OpenAPI Specification

opengov-vendor-imports-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Vendor Management Vendor Imports API
  description: 'A comprehensive API for managing vendors in the OpenGov platform.


    ## Authentication

    All endpoints require JWT Bearer token authentication. Include the token in the Authorization header:

    ```

    Authorization: Bearer <your-jwt-token>

    ```


    ## Features

    - **Vendor Management**: Create, read, update, and delete vendors

    - **Health Check**: Monitor service health


    ## Rate Limiting

    API calls are subject to rate limiting based on your subscription tier.'
  version: 1.0.0
  contact:
    name: OpenGov API Support
    email: api-support@opengov.com
  license:
    name: Proprietary
    url: https://opengov.com/terms
servers:
- url: https://api.vendor.opengov.com
  description: Production Server
- url: https://api.vendor.ogstaging.us
  description: Staging Server
- url: https://api-vendor.procurement.ogintegration.us
  description: Integration Server
security:
- bearerAuth: []
tags:
- name: vendor-imports
paths:
  /api/v1/entities/{entityId}/vendor-imports/presigned-upload:
    post:
      tags:
      - vendor-imports
      operationId: vendor-imports.requestPresignedUpload
      parameters:
      - name: Authorization
        in: header
        description: JWT Bearer token for authentication
        required: true
        schema:
          type: string
          default: Bearer <your-jwt-token>
        example: Bearer <your-jwt-token>
      - name: entityId
        in: path
        schema:
          type: string
        required: true
      security:
      - bearerAuth: []
      responses:
        '200':
          description: PresignedUploadResponse
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PresignedUploadResponse'
        '400':
          description: The request did not match the expected schema
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/HttpApiDecodeError'
                - $ref: '#/components/schemas/BadRequestHttpError'
                - $ref: '#/components/schemas/ValidationFailedHttpError'
        '401':
          description: AuthError
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/AuthError'
                - $ref: '#/components/schemas/UnauthenticatedHttpError'
        '403':
          description: UnauthorizedHttpError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedHttpError'
        '404':
          description: EntityNotFoundError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityNotFoundError'
        '413':
          description: PayloadTooLargeHttpError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayloadTooLargeHttpError'
        '500':
          description: InfrastructureError
          content:
            application/json:
              schema:
                anyOf:
                - type: object
                  required:
                  - message
                  - _tag
                  properties:
                    message:
                      type: string
                    cause:
                      not: {}
                      title: never
                    _tag:
                      type: string
                      enum:
                      - InfrastructureError
                  additionalProperties: false
                - $ref: '#/components/schemas/InternalServerHttpError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PresignedUploadRequest'
        required: true
  /api/v1/entities/{entityId}/vendor-imports:
    post:
      tags:
      - vendor-imports
      operationId: vendor-imports.processImport
      parameters:
      - name: Authorization
        in: header
        description: JWT Bearer token for authentication
        required: true
        schema:
          type: string
          default: Bearer <your-jwt-token>
        example: Bearer <your-jwt-token>
      - name: entityId
        in: path
        schema:
          type: string
        required: true
      security:
      - bearerAuth: []
      responses:
        '202':
          description: Success
          content:
            application/json:
              schema:
                type: object
                required:
                - jobId
                - importType
                - status
                properties:
                  jobId:
                    type: string
                  importType:
                    type: string
                    enum:
                    - standard
                    - ai
                  status:
                    type: string
                    enum:
                    - parsing
                additionalProperties: false
        '400':
          description: The request did not match the expected schema
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/HttpApiDecodeError'
                - $ref: '#/components/schemas/BadRequestHttpError'
                - $ref: '#/components/schemas/ValidationFailedHttpError'
        '401':
          description: AuthError
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/AuthError'
                - $ref: '#/components/schemas/UnauthenticatedHttpError'
        '403':
          description: UnauthorizedHttpError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedHttpError'
        '404':
          description: EntityNotFoundError
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/EntityNotFoundError'
                - $ref: '#/components/schemas/NotFoundHttpError'
        '413':
          description: PayloadTooLargeHttpError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayloadTooLargeHttpError'
        '500':
          description: InfrastructureError
          content:
            application/json:
              schema:
                anyOf:
                - type: object
                  required:
                  - message
                  - _tag
                  properties:
                    message:
                      type: string
                    cause:
                      not: {}
                      title: never
                    _tag:
                      type: string
                      enum:
                      - InfrastructureError
                  additionalProperties: false
                - $ref: '#/components/schemas/InternalServerHttpError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ProcessImportRequest'
        required: true
    get:
      tags:
      - vendor-imports
      operationId: vendor-imports.listImports
      parameters:
      - name: Authorization
        in: header
        description: JWT Bearer token for authentication
        required: true
        schema:
          type: string
          default: Bearer <your-jwt-token>
        example: Bearer <your-jwt-token>
      - name: entityId
        in: path
        schema:
          type: string
        required: true
      - name: limit
        in: query
        schema:
          type: string
        required: false
      - name: offset
        in: query
        schema:
          type: string
        required: false
      - name: status
        in: query
        schema:
          type: string
        required: false
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                required:
                - data
                - meta
                properties:
                  data:
                    type: array
                    items:
                      type: object
                      required:
                      - importId
                      - fileName
                      - fileType
                      - uploadedBy
                      - totalRecords
                      - successCount
                      - failureCount
                      - errorCount
                      - duplicateCount
                      - status
                      - createdAt
                      - completedAt
                      properties:
                        importId:
                          type: string
                        fileName:
                          type: string
                        fileType:
                          type: string
                          enum:
                          - xlsx
                          - csv
                          - txt
                        uploadedBy:
                          type: string
                        totalRecords:
                          type: number
                        successCount:
                          type: number
                        failureCount:
                          type: number
                        errorCount:
                          type: number
                        duplicateCount:
                          type: number
                        status:
                          type: string
                          enum:
                          - parsing
                          - parsed
                          - validating
                          - validated
                          - importing
                          - imported
                          - failed
                        errorReportDownloadUrl:
                          type: string
                        originalFileDownloadUrl:
                          type: string
                        createdAt:
                          type: string
                        completedAt:
                          anyOf:
                          - type: string
                          - type: 'null'
                      additionalProperties: false
                  meta:
                    type: object
                    required:
                    - total
                    - limit
                    - offset
                    properties:
                      total:
                        type: number
                      limit:
                        type: number
                      offset:
                        type: number
                    additionalProperties: false
                additionalProperties: false
        '400':
          description: The request did not match the expected schema
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/HttpApiDecodeError'
                - $ref: '#/components/schemas/BadRequestHttpError'
        '401':
          description: AuthError
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/AuthError'
                - $ref: '#/components/schemas/UnauthenticatedHttpError'
        '403':
          description: UnauthorizedHttpError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedHttpError'
        '404':
          description: EntityNotFoundError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityNotFoundError'
        '500':
          description: InfrastructureError
          content:
            application/json:
              schema:
                anyOf:
                - type: object
                  required:
                  - message
                  - _tag
                  properties:
                    message:
                      type: string
                    cause:
                      not: {}
                      title: never
                    _tag:
                      type: string
                      enum:
                      - InfrastructureError
                  additionalProperties: false
                - $ref: '#/components/schemas/InternalServerHttpError'
  /api/v1/entities/{entityId}/vendor-imports/{importId}/import:
    post:
      tags:
      - vendor-imports
      operationId: vendor-imports.triggerImport
      parameters:
      - name: Authorization
        in: header
        description: JWT Bearer token for authentication
        required: true
        schema:
          type: string
          default: Bearer <your-jwt-token>
        example: Bearer <your-jwt-token>
      - name: entityId
        in: path
        schema:
          type: string
        required: true
      - name: importId
        in: path
        schema:
          type: string
        required: true
      security:
      - bearerAuth: []
      responses:
        '202':
          description: Success
          content:
            application/json:
              schema:
                type: object
                required:
                - jobId
                - status
                - totalRecords
                properties:
                  jobId:
                    type: string
                  status:
                    type: string
                    enum:
                    - importing
                  totalRecords:
                    type: number
                additionalProperties: false
        '400':
          description: The request did not match the expected schema
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/HttpApiDecodeError'
                - $ref: '#/components/schemas/BadRequestHttpError'
                - $ref: '#/components/schemas/ValidationFailedHttpError'
        '401':
          description: AuthError
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/AuthError'
                - $ref: '#/components/schemas/UnauthenticatedHttpError'
        '403':
          description: UnauthorizedHttpError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedHttpError'
        '404':
          description: EntityNotFoundError
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/EntityNotFoundError'
                - $ref: '#/components/schemas/NotFoundHttpError'
        '413':
          description: PayloadTooLargeHttpError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayloadTooLargeHttpError'
        '500':
          description: InfrastructureError
          content:
            application/json:
              schema:
                anyOf:
                - type: object
                  required:
                  - message
                  - _tag
                  properties:
                    message:
                      type: string
                    cause:
                      not: {}
                      title: never
                    _tag:
                      type: string
                      enum:
                      - InfrastructureError
                  additionalProperties: false
                - $ref: '#/components/schemas/InternalServerHttpError'
  /api/v1/entities/{entityId}/vendor-imports/{importId}:
    get:
      tags:
      - vendor-imports
      operationId: vendor-imports.getImportDetail
      parameters:
      - name: Authorization
        in: header
        description: JWT Bearer token for authentication
        required: true
        schema:
          type: string
          default: Bearer <your-jwt-token>
        example: Bearer <your-jwt-token>
      - name: entityId
        in: path
        schema:
          type: string
        required: true
      - name: importId
        in: path
        schema:
          type: string
        required: true
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                required:
                - importId
                - fileName
                - uploadedBy
                - status
                - totalVendors
                - validVendorCount
                - invalidVendorCount
                - errorCount
                - duplicateCount
                - createdAt
                - completedAt
                - processingTimeMs
                properties:
                  importId:
                    type: string
                  fileName:
                    type: string
                  uploadedBy:
                    type: string
                  importType:
                    type: string
                    enum:
                    - standard
                    - ai
                  status:
                    type: string
                    enum:
                    - parsing
                    - parsed
                    - validating
                    - validated
                    - importing
                    - imported
                    - failed
                  totalVendors:
                    type: number
                  validVendorCount:
                    type: number
                  invalidVendorCount:
                    type: number
                  errorCount:
                    type: number
                  duplicateCount:
                    type: number
                  errorReportDownloadUrl:
                    type: string
                  originalFileDownloadUrl:
                    type: string
                  filledTemplateDownloadUrl:
                    type: string
                  successReportDownloadUrl:
                    type: string
                  createdAt:
                    type: string
                  completedAt:
                    anyOf:
                    - type: string
                    - type: 'null'
                  processingTimeMs:
                    anyOf:
                    - type: number
                    - type: 'null'
                  currentStep:
                    type: string
                  preview:
                    type: object
                    required: []
                    properties: {}
                    additionalProperties:
                      type: array
                      items:
                        type: object
                        required: []
                        properties: {}
                        additionalProperties:
                          title: unknown
                  unmapped:
                    type: object
                    required:
                    - sourceUnmappedColumns
                    - targetUnmappedColumns
                    properties:
                      sourceUnmappedColumns:
                        type: array
                        items:
                          type: string
                      targetUnmappedColumns:
                        type: array
                        items:
                          type: string
                    additionalProperties: false
                  requiredColumns:
                    type: object
                    required: []
                    properties: {}
                    additionalProperties:
                      type: array
                      items:
                        type: string
                  validationResult:
                    type: object
                    required:
                    - isValid
                    - errors
                    - sheetSummary
                    properties:
                      isValid:
                        type: boolean
                      errors:
                        type: array
                        items:
                          type: object
                          required:
                          - severity
                          - code
                          - message
                          properties:
                            severity:
                              type: string
                              enum:
                              - error
                              - warning
                            code:
                              type: string
                            message:
                              type: string
                            sheet:
                              type: string
                            row:
                              type: number
                            column:
                              type: string
                            vendorImportKey:
                              type: string
                          additionalProperties: false
                      sheetSummary:
                        type: object
                        required: []
                        properties: {}
                        additionalProperties:
                          type: object
                          required:
                          - rowCount
                          - hasRequiredColumns
                          properties:
                            rowCount:
                              type: number
                            hasRequiredColumns:
                              type: boolean
                            missingColumns:
                              type: array
                              items:
                                type: string
                          additionalProperties: false
                    additionalProperties: false
                  error:
                    type: string
                additionalProperties: false
        '400':
          description: The request did not match the expected schema
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/HttpApiDecodeError'
                - $ref: '#/components/schemas/BadRequestHttpError'
        '401':
          description: AuthError
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/AuthError'
                - $ref: '#/components/schemas/UnauthenticatedHttpError'
        '403':
          description: UnauthorizedHttpError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedHttpError'
        '404':
          description: EntityNotFoundError
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/EntityNotFoundError'
                - $ref: '#/components/schemas/NotFoundHttpError'
        '500':
          description: InfrastructureError
          content:
            application/json:
              schema:
                anyOf:
                - type: object
                  required:
                  - message
                  - _tag
                  properties:
                    message:
                      type: string
                    cause:
                      not: {}
                      title: never
                    _tag:
                      type: string
                      enum:
                      - InfrastructureError
                  additionalProperties: false
                - $ref: '#/components/schemas/InternalServerHttpError'
  /api/v1/entities/{entityId}/vendor-imports/template:
    get:
      tags:
      - vendor-imports
      operationId: vendor-imports.downloadTemplate
      parameters:
      - name: Authorization
        in: header
        description: JWT Bearer token for authentication
        required: true
        schema:
          type: string
          default: Bearer <your-jwt-token>
        example: Bearer <your-jwt-token>
      - name: entityId
        in: path
        schema:
          type: string
        required: true
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Template download response with presigned URL and structured instructions for UI display
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TemplateDownloadResponse'
        '400':
          description: The request did not match the expected schema
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/HttpApiDecodeError'
                - $ref: '#/components/schemas/BadRequestHttpError'
        '401':
          description: AuthError
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/AuthError'
                - $ref: '#/components/schemas/UnauthenticatedHttpError'
        '403':
          description: UnauthorizedHttpError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedHttpError'
        '404':
          description: EntityNotFoundError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EntityNotFoundError'
        '500':
          description: InfrastructureError
          content:
            application/json:
              schema:
                anyOf:
                - type: object
                  required:
                  - message
                  - _tag
                  properties:
                    message:
                      type: string
                    cause:
                      not: {}
                      title: never
                    _tag:
                      type: string
                      enum:
                      - InfrastructureError
                  additionalProperties: false
                - $ref: '#/components/schemas/InternalServerHttpError'
  /api/v1/entities/{entityId}/vendor-imports/{jobId}/validate:
    post:
      tags:
      - vendor-imports
      operationId: vendor-imports.validateJob
      parameters:
      - name: Authorization
        in: header
        description: JWT Bearer token for authentication
        required: true
        schema:
          type: string
          default: Bearer <your-jwt-token>
        example: Bearer <your-jwt-token>
      - name: entityId
        in: path
        schema:
          type: string
        required: true
      - name: jobId
        in: path
        schema:
          type: string
        required: true
      security:
      - bearerAuth: []
      responses:
        '202':
          description: Success
          content:
            application/json:
              schema:
                type: object
                required:
                - jobId
                - status
                properties:
                  jobId:
                    type: string
                  status:
                    type: string
                    enum:
                    - validating
                additionalProperties: false
        '400':
          description: The request did not match the expected schema
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/HttpApiDecodeError'
                - $ref: '#/components/schemas/BadRequestHttpError'
                - $ref: '#/components/schemas/ValidationFailedHttpError'
        '401':
          description: AuthError
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/AuthError'
                - $ref: '#/components/schemas/UnauthenticatedHttpError'
        '403':
          description: UnauthorizedHttpError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedHttpError'
        '404':
          description: EntityNotFoundError
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/EntityNotFoundError'
                - $ref: '#/components/schemas/NotFoundHttpError'
        '413':
          description: PayloadTooLargeHttpError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayloadTooLargeHttpError'
        '500':
          description: InfrastructureError
          content:
            application/json:
              schema:
                anyOf:
                - type: object
                  required:
                  - message
                  - _tag
                  properties:
                    message:
                      type: string
                    cause:
                      not: {}
                      title: never
                    _tag:
                      type: string
                      enum:
                      - InfrastructureError
                  additionalProperties: false
                - $ref: '#/components/schemas/InternalServerHttpError'
  /api/v1/entities/{entityId}/vendor-imports/{jobId}/remap:
    post:
      tags:
      - vendor-imports
      operationId: vendor-imports.remapColumns
      parameters:
      - name: Authorization
        in: header
        description: JWT Bearer token for authentication
        required: true
        schema:
          type: string
          default: Bearer <your-jwt-token>
        example: Bearer <your-jwt-token>
      - name: entityId
        in: path
        schema:
          type: string
        required: true
      - name: jobId
        in: path
        schema:
          type: string
        required: true
      security:
      - bearerAuth: []
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                required:
                - filledTemplateDownloadUrl
                properties:
                  filledTemplateDownloadUrl:
                    type: string
                additionalProperties: false
        '400':
          description: The request did not match the expected schema
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/HttpApiDecodeError'
                - $ref: '#/components/schemas/BadRequestHttpError'
                - $ref: '#/components/schemas/ValidationFailedHttpError'
        '401':
          description: AuthError
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/AuthError'
                - $ref: '#/components/schemas/UnauthenticatedHttpError'
        '403':
          description: UnauthorizedHttpError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UnauthorizedHttpError'
        '404':
          description: EntityNotFoundError
          content:
            application/json:
              schema:
                anyOf:
                - $ref: '#/components/schemas/EntityNotFoundError'
                - $ref: '#/components/schemas/NotFoundHttpError'
        '413':
          description: PayloadTooLargeHttpError
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayloadTooLargeHttpError'
        '500':
          description: InfrastructureError
          content:
            application/json:
              schema:
                anyOf:
                - type: object
                  required:
                  - message
                  - _tag
                  properties:
                    message:
              

# --- truncated at 32 KB (42 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/opengov/refs/heads/main/openapi/opengov-vendor-imports-api-openapi.yml