Procurify catalog API

The catalog API from Procurify — 3 operation(s) for catalog.

OpenAPI Specification

procurify-catalog-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Procurify API Documentation account-codes catalog API
  version: ''
  description: '

    # Disclaimer


    - Procurify’s API is evolving and is subject to change at any time. Additionally, aspects of the API are undocumented, including certain methods, events, and properties. Given that both documented and undocumented aspects of the Procurify API may change at any time, the client relies on the API at their own risk.

    - Client (and/or client’s representative) is responsible for building, testing, and maintaining any API connection between Procurify and any other tool.  Procurify’s responsibility strictly involves providing support on clarifications in regards to the issued API document.

    - Procurify’s API is offered on an “as is” and “as available” basis, without warranties of any kind. By accepting this agreement, you agree that you have read the current API documentation, and accept the API functionality in its current state including current limitations. For questions and clarification around the documentation, please contact support@procurify.com.

    - In accordance with Section 2.(b) of our Subscription Services Agreement, Procurify reserves the right to deny access to our API at any time. If your API requests are too large and time out, contact us immediately to avoid possible suspension of access.

    - You may not attempt to reverse engineer or otherwise derive source code, trade secrets, or know-how in the Procurify API or portion thereof. You may not use the Procurify API to replicate or compete with core products or services offered by Procurify.

    '
servers:
- url: https://{user_domain}.procurify.com
  description: Your Procurify domain
  variables:
    user_domain:
      default: your-domain
      description: Your procurify domain
tags:
- name: catalog
paths:
  /api/v3/catalog-bundles/:
    get:
      operationId: catalog_bundles_list
      summary: Get All Catalog Bundles
      parameters:
      - in: query
        name: format
        schema:
          type: string
          enum:
          - csv
          - json
      - name: order_by
        required: false
        in: query
        description: Which field to use when ordering the results.
        schema:
          type: string
      - name: page
        required: false
        in: query
        description: A page number within the paginated result set.
        schema:
          type: integer
      - name: page_size
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      - name: search
        required: false
        in: query
        description: A search term.
        schema:
          type: string
      tags:
      - catalog
      security:
      - RemoteAuthentication: []
      - M2MAuthentication: []
      - BasicAuthentication: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedCatalogItemBundleReadList'
            text/csv:
              schema:
                $ref: '#/components/schemas/PaginatedCatalogItemBundleReadList'
          description: ''
  /api/v3/catalog-items/:
    get:
      operationId: catalog_items_list
      summary: Get All Catalog Items
      parameters:
      - in: query
        name: bundle
        schema:
          type: integer
      - in: query
        name: currency
        schema:
          type: integer
      - in: query
        name: department
        schema:
          type: string
        description: A comma-separated list of integers.
      - in: query
        name: format
        schema:
          type: string
          enum:
          - csv
          - json
      - in: query
        name: internalSKU
        schema:
          type: string
      - in: query
        name: location
        schema:
          type: string
        description: A comma-separated list of integers.
      - in: query
        name: max_price
        schema:
          type: number
      - in: query
        name: min_price
        schema:
          type: number
      - name: order_by
        required: false
        in: query
        description: Which field to use when ordering the results.
        schema:
          type: string
      - name: page
        required: false
        in: query
        description: A page number within the paginated result set.
        schema:
          type: integer
      - name: page_size
        required: false
        in: query
        description: Number of results to return per page.
        schema:
          type: integer
      - in: query
        name: pref_vendor
        schema:
          type: integer
      - name: search
        required: false
        in: query
        description: A search term.
        schema:
          type: string
      tags:
      - catalog
      security:
      - RemoteAuthentication: []
      - M2MAuthentication: []
      - BasicAuthentication: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedCatalogItemReadList'
            text/csv:
              schema:
                $ref: '#/components/schemas/PaginatedCatalogItemReadList'
          description: ''
    post:
      operationId: catalog_items_create
      summary: Create Catalog Item
      parameters:
      - in: query
        name: format
        schema:
          type: string
          enum:
          - csv
          - json
      tags:
      - catalog
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CatalogItemUpsertRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/CatalogItemUpsertRequest'
          ? ''
          : schema:
              $ref: '#/components/schemas/CatalogItemUpsertRequest'
          application/xml:
            schema:
              $ref: '#/components/schemas/CatalogItemUpsertRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CatalogItemUpsertRequest'
        required: true
      security:
      - RemoteAuthentication: []
      - M2MAuthentication: []
      - BasicAuthentication: []
      - cookieAuth: []
      responses:
        '201':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogItemReadSerializerSingleCreate'
            text/csv:
              schema:
                $ref: '#/components/schemas/CatalogItemReadSerializerSingleCreate'
          description: ''
  /api/v3/catalog-items/{id}/:
    put:
      operationId: catalog_items_update
      summary: Update Catalog Item
      parameters:
      - in: query
        name: format
        schema:
          type: string
          enum:
          - csv
          - json
      - in: path
        name: id
        schema:
          type: integer
        description: A unique integer value identifying this catalog items.
        required: true
      tags:
      - catalog
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CatalogItemUpsertRequest'
          application/x-www-form-urlencoded:
            schema:
              $ref: '#/components/schemas/CatalogItemUpsertRequest'
          ? ''
          : schema:
              $ref: '#/components/schemas/CatalogItemUpsertRequest'
          application/xml:
            schema:
              $ref: '#/components/schemas/CatalogItemUpsertRequest'
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/CatalogItemUpsertRequest'
        required: true
      security:
      - RemoteAuthentication: []
      - M2MAuthentication: []
      - BasicAuthentication: []
      - cookieAuth: []
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CatalogItemReadSerializerSingleUpdate'
            text/csv:
              schema:
                $ref: '#/components/schemas/CatalogItemReadSerializerSingleUpdate'
          description: ''
components:
  schemas:
    CreditCardTypeEnum:
      enum:
      - 0
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      type: integer
      description: '* `0` - other-credit-card

        * `1` - Visa

        * `2` - Mastercard

        * `3` - American Express

        * `4` - Discover

        * `5` - JCB

        * `6` - Diner''s Club

        * `7` - Procurify'
    CreditCard:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        uuid:
          type: string
          format: uuid
        is_active:
          type: boolean
        created_at:
          type: string
          format: date-time
          readOnly: true
        updated_at:
          type: string
          format: date-time
          readOnly: true
        name:
          type: string
          maxLength: 255
        number:
          type: string
          pattern: ^[0-9]{4}$
          maxLength: 19
        balance:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
          nullable: true
        gl_code:
          type: string
          maxLength: 100
        type:
          allOf:
          - $ref: '#/components/schemas/CreditCardTypeEnum'
          minimum: -2147483648
          maximum: 2147483647
        category:
          nullable: true
          minimum: -2147483648
          maximum: 2147483647
          oneOf:
          - $ref: '#/components/schemas/CategoryEnum'
          - $ref: '#/components/schemas/NullEnum'
          type: integer
        external_id:
          type: string
          description: External id of the Credit Card
          maxLength: 100
        status:
          nullable: true
          description: 'The status of the Credit Card


            * `pending` - Pending

            * `active` - Active

            * `inactive` - Inactive

            * `canceled` - Canceled

            * `lost` - Lost

            * `stolen` - Stolen'
          oneOf:
          - $ref: '#/components/schemas/CreditCardStatusEnum'
          - $ref: '#/components/schemas/BlankEnum'
          - $ref: '#/components/schemas/NullEnum'
          type: integer
        require_activation:
          type: boolean
          title: Require new activation?
          description: Does this card require new activation?
        last_changed_by:
          type: integer
          nullable: true
          title: Last changed by user
        vendor:
          type: integer
        payment_method:
          type: integer
          nullable: true
        currency:
          type: integer
        currency_name:
          type: string
          readOnly: true
        creator:
          type: integer
          nullable: true
          title: Card Issuer
        assignees:
          type: array
          items:
            $ref: '#/components/schemas/CreditCardAssignee'
      required:
      - assignees
      - currency
      - uuid
      - vendor
    PaginatedCatalogItemBundleReadList:
      type: object
      properties:
        metadata:
          type: object
          properties:
            pagination:
              type: object
              properties:
                count:
                  type: integer
                  example: 10
                next:
                  type: string
                  nullable: true
                  format: uri
                  example: null
                previous:
                  type: string
                  nullable: true
                  format: uri
                  example: null
                page_size:
                  type: integer
                  example: 10
                num_pages:
                  type: integer
                  example: 1
                current_page:
                  type: integer
                  example: 1
          example:
            pagination:
              count: 10
              next: null
              previous: null
              page_size: 10
              num_pages: 1
              current_page: 1
        data:
          type: array
          items:
            $ref: '#/components/schemas/CatalogItemBundleRead'
    PaymentMethod:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 100
        description:
          type: string
          nullable: true
        active:
          type: boolean
      required:
      - name
    VendorTypeEnum:
      enum:
      - 2
      - 3
      - 4
      - 6
      - 7
      type: integer
      description: '* `2` - amazon punchout

        * `3` - preferred

        * `4` - regular

        * `6` - credit card provider

        * `7` - checkout'
    PaymentMethodTypeEnum:
      enum:
      - 0
      - 1
      - 2
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      type: integer
      description: '* `0` - OTHER

        * `1` - CHECK

        * `2` - ACH

        * `3` - EFT

        * `4` - WIRE

        * `5` - PROCURIFY_CHECK

        * `6` - PROCURIFY_ACH

        * `7` - PROCURIFY_WIRE

        * `8` - AIRWALLEX'
    EmailConfiguration:
      type: object
      properties:
        auto_po:
          type: boolean
        payment_remittance:
          type: boolean
    BlankEnum:
      enum:
      - ''
    PaymentTerm:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 100
        description:
          type: string
          nullable: true
        active:
          type: boolean
      required:
      - name
    CustomFieldRead:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 200
        content_type:
          type: integer
        default_value:
          type: string
          maxLength: 5000
        is_required:
          type: boolean
        field_choices:
          type: array
          items:
            type: string
          readOnly: true
        field_type:
          $ref: '#/components/schemas/FieldTypeEnum'
        field_label:
          type: string
          readOnly: true
        is_active:
          type: boolean
          readOnly: true
      required:
      - content_type
      - name
    CatalogItemReadSerializerSingleCreate:
      type: object
      properties:
        metadata:
          type: object
          additionalProperties: {}
          default: {}
        data:
          $ref: '#/components/schemas/CatalogItemRead'
      required:
      - data
    CatalogItemBundleRead:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 100
        description:
          type: string
          maxLength: 250
        image:
          type: string
        active:
          type: boolean
        items:
          type: array
          items:
            $ref: '#/components/schemas/CatalogItemReadSerializerWithQuantity'
          readOnly: true
        items_count:
          type: integer
          readOnly: true
      required:
      - name
    Currency:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 10
        description:
          type: string
          maxLength: 100
        rate:
          type: string
          format: decimal
          pattern: ^-?\d{0,9}(?:\.\d{0,6})?$
        base:
          type: boolean
        active:
          type: boolean
      required:
      - name
      - rate
    AccountCodeRead:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        applied_accounts_count:
          type: integer
          readOnly: true
        code:
          type: string
          maxLength: 50
        code_length:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
        description:
          type: string
          maxLength: 200
        account_type:
          allOf:
          - $ref: '#/components/schemas/AccountTypeEnum'
          minimum: -2147483648
          maximum: 2147483647
        active:
          type: boolean
        parent:
          type: integer
          nullable: true
      required:
      - code
      - description
    ShippingTerm:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 100
        description:
          type: string
          nullable: true
        active:
          type: boolean
      required:
      - name
    CatalogItemReadSerializerWithQuantity:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 255
        image:
          type: string
        unitType:
          type: string
          maxLength: 30
        pref_vendor:
          $ref: '#/components/schemas/VendorRead'
        account_code:
          $ref: '#/components/schemas/AccountCodeRead'
        internalSKU:
          type: string
          maxLength: 50
        description:
          type: string
          nullable: true
        product_url:
          type: string
          nullable: true
        currency:
          $ref: '#/components/schemas/CurrencySummary'
        price:
          type: string
          format: decimal
          pattern: ^-?\d{0,13}(?:\.\d{0,8})?$
        rfo_lock:
          type: boolean
        departments:
          type: array
          items:
            type: integer
          readOnly: true
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomFieldValueRead'
          readOnly: true
        requested_count:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
        last_requested_date:
          type: string
          format: date-time
          nullable: true
        selected_account:
          type: object
          additionalProperties: {}
          readOnly: true
        quantity:
          type: number
          format: double
      required:
      - account_code
      - currency
      - name
      - pref_vendor
      - quantity
    AccountTypeEnum:
      enum:
      - 0
      - 1
      - 2
      - 3
      - 4
      - 5
      type: integer
      description: '* `0` - Assets

        * `1` - Liability

        * `2` - Expense

        * `3` - Income

        * `4` - Equity

        * `5` - Other'
    VendorRead:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          description: Name of the vendor
          maxLength: 150
        active:
          type: boolean
        addressLineOne:
          type: string
          nullable: true
          title: Address line 1
          description: First line of address
          maxLength: 300
        addressLineTwo:
          type: string
          nullable: true
          title: Address line 2
          description: Second line of address
          maxLength: 300
        postalCode:
          type: string
          nullable: true
          title: Postal Code
          description: Postal or Zip code of the vendor
          maxLength: 20
        city:
          type: string
          nullable: true
          description: City of the vendor
          maxLength: 50
        state_province:
          type: string
          nullable: true
          title: State/Province
          description: State or Province of the vendor
          maxLength: 40
        country:
          type: string
          nullable: true
          description: Country of the vendor
          maxLength: 80
        phoneOne:
          type: string
          nullable: true
          description: Primary phone no. of the vendor
          maxLength: 20
        phoneTwo:
          type: string
          nullable: true
          description: Secondary phone no. of the vendor
          maxLength: 20
        fax:
          type: string
          nullable: true
          description: Fax no. of the vendor
          maxLength: 20
        email:
          type: array
          items:
            type: string
            format: email
        comments:
          type: string
          nullable: true
          description: Notes about the vendor
        contact:
          type: string
          nullable: true
          description: Contact person of the vendor
          maxLength: 50
        url:
          type: string
          nullable: true
          description: Website of the vendor
          maxLength: 200
        external_id:
          type: string
          nullable: true
          description: External id of the vendor
          maxLength: 100
        dateModified:
          type: string
          format: date-time
          readOnly: true
        currency:
          type: integer
          nullable: true
        payment_term_ref:
          allOf:
          - $ref: '#/components/schemas/PaymentTerm'
          nullable: true
          type: object
        shipping_term_ref:
          allOf:
          - $ref: '#/components/schemas/ShippingTerm'
          nullable: true
          type: object
        payment_method_ref:
          allOf:
          - $ref: '#/components/schemas/PaymentMethod'
          nullable: true
          type: object
        shipping_method_ref:
          allOf:
          - $ref: '#/components/schemas/ShippingMethod'
          nullable: true
          type: object
        payment_methods:
          type: array
          items:
            $ref: '#/components/schemas/PaymentMethodRead'
          readOnly: true
        tax:
          type: integer
          nullable: true
        type:
          $ref: '#/components/schemas/VendorTypeEnum'
        default_payment_method:
          type: integer
          nullable: true
        creditcards:
          type: array
          items:
            $ref: '#/components/schemas/CreditCard'
          readOnly: true
        is_1099_eligible:
          type: boolean
          nullable: true
          title: 1099 Eligible?
        overall_score:
          type: number
          format: double
          nullable: true
          readOnly: true
        is_auto_email_po_enabled:
          type: boolean
        po_pdf_labels:
          type: string
          description: Placeholder for a KVStore value
          maxLength: 200
        email_configurations:
          type: object
          additionalProperties:
            $ref: '#/components/schemas/EmailConfiguration'
      required:
      - name
      - type
    FieldTypeEnum:
      enum:
      - t
      - a
      - i
      - f
      - b
      - m
      - d
      - h
      type: string
      description: '* `t` - Text

        * `a` - Large Text Field

        * `i` - Integer

        * `f` - Floating point decimal

        * `b` - Boolean (Yes/No)

        * `m` - Dropdown Choices

        * `d` - Date

        * `h` - Date Time'
    PaymentMethodRead:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 255
        type:
          allOf:
          - $ref: '#/components/schemas/PaymentMethodTypeEnum'
          title: Payment Method
          minimum: 0
          maximum: 4294967295
        data: {}
        currency:
          $ref: '#/components/schemas/Currency'
        payment_rail:
          type: string
          readOnly: true
        bank_account_country_code:
          type: string
          nullable: true
          readOnly: true
      required:
      - currency
      - data
    CatalogItemReadSerializerSingleUpdate:
      type: object
      properties:
        metadata:
          type: object
          additionalProperties: {}
          default: {}
        data:
          $ref: '#/components/schemas/CatalogItemRead'
      required:
      - data
    CreditCardAssignee:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        firstName:
          type: string
          maxLength: 100
        lastName:
          type: string
          maxLength: 100
        email:
          type: string
          format: email
          maxLength: 254
        profile_image:
          type: string
          nullable: true
      required:
      - email
    NullEnum:
      enum:
      - null
    CategoryEnum:
      enum:
      - 0
      - 1
      type: integer
      description: '* `0` - Physical

        * `1` - Virtual'
    PaginatedCatalogItemReadList:
      type: object
      properties:
        metadata:
          type: object
          properties:
            pagination:
              type: object
              properties:
                count:
                  type: integer
                  example: 10
                next:
                  type: string
                  nullable: true
                  format: uri
                  example: null
                previous:
                  type: string
                  nullable: true
                  format: uri
                  example: null
                page_size:
                  type: integer
                  example: 10
                num_pages:
                  type: integer
                  example: 1
                current_page:
                  type: integer
                  example: 1
          example:
            pagination:
              count: 10
              next: null
              previous: null
              page_size: 10
              num_pages: 1
              current_page: 1
        data:
          type: array
          items:
            $ref: '#/components/schemas/CatalogItemRead'
    CatalogItemRead:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 255
        image:
          type: string
        unitType:
          type: string
          maxLength: 30
        pref_vendor:
          $ref: '#/components/schemas/VendorRead'
        account_code:
          $ref: '#/components/schemas/AccountCodeRead'
        internalSKU:
          type: string
          maxLength: 50
        description:
          type: string
          nullable: true
        product_url:
          type: string
          nullable: true
        currency:
          $ref: '#/components/schemas/CurrencySummary'
        price:
          type: string
          format: decimal
          pattern: ^-?\d{0,13}(?:\.\d{0,8})?$
        rfo_lock:
          type: boolean
        departments:
          type: array
          items:
            type: integer
          readOnly: true
        custom_fields:
          type: array
          items:
            $ref: '#/components/schemas/CustomFieldValueRead'
          readOnly: true
        requested_count:
          type: integer
          maximum: 2147483647
          minimum: -2147483648
        last_requested_date:
          type: string
          format: date-time
          nullable: true
        selected_account:
          type: object
          additionalProperties: {}
          readOnly: true
      required:
      - account_code
      - currency
      - name
      - pref_vendor
    ShippingMethod:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 100
        description:
          type: string
          nullable: true
        active:
          type: boolean
      required:
      - name
    CatalogItemUpsertRequest:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
          minLength: 1
          maxLength: 255
        image:
          type: string
        unitType:
          type: string
          maxLength: 30
        pref_vendor:
          type: integer
          nullable: true
        account_code:
          type: integer
          nullable: true
        internalSKU:
          type: string
          maxLength: 50
        description:
          type: string
          nullable: true
        product_url:
          type: string
          nullable: true
        currency:
          type: integer
        price:
          type: string
          format: decimal
          pattern: ^-?\d{0,13}(?:\.\d{0,8})?$
        rfo_lock:
          type: boolean
        departments:
          type: array
          items:
            type: integer
        custom_fields:
          type: array
          items:
            type: object
            additionalProperties: {}
      required:
      - currency
      - custom_fields
      - name
    CurrencySummary:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        name:
          type: string
          maxLength: 10
        rate:
          type: string
          format: decimal
          pattern: ^-?\d{0,9}(?:\.\d{0,6})?$
        base:
          type: boolean
      required:
      - name
      - rate
    CustomFieldValueRead:
      type: object
      properties:
        id:
          type: integer
          readOnly: true
        value:
          oneOf:
          - type: string
          - type: boolean
          description: 'Given the *incoming* primitive data, return the value for this field

            that should be validated and transformed to a native value.'
          readOnly: true
        field:
          $ref: '#/components/schemas/CustomFieldRead'
      required:
      - field
    CreditCardStatusEnum:
      enum:
      - pending
      - active
      - inactive
      - canceled
      - lost
      - stolen
      type: string
      description: '* `pending` - Pending

        * `active` - Active

        * `inactive` - Inactive

        * `canceled` - Canceled

        * `lost` - Lost

        * `stolen` - Stolen'
  securitySchemes:
    BasicAuthentication:
      type: http
      scheme: basic
    M2MAuthentication:
      type: http
      scheme: bearer
      bearerFormat: JWT
    RemoteAuthentication:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://<your-domain>.procurify.com/oauth/authorize
          tokenUrl: https://<your-domain>.procurify.com/oauth/token
          scopes: {}
    cookieAuth:
      type: apiKey
      in: cookie
      name: sessionid