Procurify catalog API
The catalog API from Procurify — 3 operation(s) for catalog.
The catalog API from Procurify — 3 operation(s) for catalog.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/procurify-catalog-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Procurify API Documentation account-codes Catalog API
version: '1.0'
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:
CatalogItemReadSerializerSingleCreate:
type: object
properties:
metadata:
type: object
additionalProperties: {}
default: {}
data:
$ref: '#/components/schemas/CatalogItemRead'
required:
- data
ShippingTerm:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
maxLength: 100
description:
type:
- string
- 'null'
active:
type: boolean
required:
- name
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
- 'null'
required:
- email
PaginatedCatalogItemBundleReadList:
type: object
properties:
metadata:
type: object
properties:
pagination:
type: object
properties:
count:
type: integer
example: 10
next:
type:
- string
- 'null'
format: uri
example: null
previous:
type:
- string
- 'null'
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'
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
- 'null'
title: Address line 1
description: First line of address
maxLength: 300
addressLineTwo:
type:
- string
- 'null'
title: Address line 2
description: Second line of address
maxLength: 300
postalCode:
type:
- string
- 'null'
title: Postal Code
description: Postal or Zip code of the vendor
maxLength: 20
city:
type:
- string
- 'null'
description: City of the vendor
maxLength: 50
state_province:
type:
- string
- 'null'
title: State/Province
description: State or Province of the vendor
maxLength: 40
country:
type:
- string
- 'null'
description: Country of the vendor
maxLength: 80
phoneOne:
type:
- string
- 'null'
description: Primary phone no. of the vendor
maxLength: 20
phoneTwo:
type:
- string
- 'null'
description: Secondary phone no. of the vendor
maxLength: 20
fax:
type:
- string
- 'null'
description: Fax no. of the vendor
maxLength: 20
email:
type: array
items:
type: string
format: email
comments:
type:
- string
- 'null'
description: Notes about the vendor
contact:
type:
- string
- 'null'
description: Contact person of the vendor
maxLength: 50
url:
type:
- string
- 'null'
description: Website of the vendor
maxLength: 200
external_id:
type:
- string
- 'null'
description: External id of the vendor
maxLength: 100
dateModified:
type: string
format: date-time
readOnly: true
currency:
type:
- integer
- 'null'
payment_term_ref:
allOf:
- $ref: '#/components/schemas/PaymentTerm'
type:
- object
- 'null'
shipping_term_ref:
allOf:
- $ref: '#/components/schemas/ShippingTerm'
type:
- object
- 'null'
payment_method_ref:
allOf:
- $ref: '#/components/schemas/PaymentMethod'
type:
- object
- 'null'
shipping_method_ref:
allOf:
- $ref: '#/components/schemas/ShippingMethod'
type:
- object
- 'null'
payment_methods:
type: array
items:
$ref: '#/components/schemas/PaymentMethodRead'
readOnly: true
tax:
type:
- integer
- 'null'
type:
$ref: '#/components/schemas/VendorTypeEnum'
default_payment_method:
type:
- integer
- 'null'
creditcards:
type: array
items:
$ref: '#/components/schemas/CreditCard'
readOnly: true
is_1099_eligible:
type:
- boolean
- 'null'
title: 1099 Eligible?
overall_score:
type:
- number
- 'null'
format: double
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
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
- 'null'
product_url:
type:
- string
- 'null'
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
- 'null'
format: date-time
selected_account:
type: object
additionalProperties: {}
readOnly: true
quantity:
type: number
format: double
required:
- account_code
- currency
- name
- pref_vendor
- quantity
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
- 'null'
readOnly: true
required:
- currency
- data
PaymentMethod:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
maxLength: 100
description:
type:
- string
- 'null'
active:
type: boolean
required:
- name
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
- 'null'
maximum: 2147483647
minimum: -2147483648
gl_code:
type: string
maxLength: 100
type:
allOf:
- $ref: '#/components/schemas/CreditCardTypeEnum'
minimum: -2147483648
maximum: 2147483647
category:
minimum: -2147483648
maximum: 2147483647
oneOf:
- $ref: '#/components/schemas/CategoryEnum'
- $ref: '#/components/schemas/NullEnum'
type:
- integer
- 'null'
external_id:
type: string
description: External id of the Credit Card
maxLength: 100
status:
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
- 'null'
require_activation:
type: boolean
title: Require new activation?
description: Does this card require new activation?
last_changed_by:
type:
- integer
- 'null'
title: Last changed by user
vendor:
type: integer
payment_method:
type:
- integer
- 'null'
currency:
type: integer
currency_name:
type: string
readOnly: true
creator:
type:
- integer
- 'null'
title: Card Issuer
assignees:
type: array
items:
$ref: '#/components/schemas/CreditCardAssignee'
required:
- assignees
- currency
- uuid
- vendor
BlankEnum:
enum:
- ''
PaymentTerm:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
maxLength: 100
description:
type:
- string
- 'null'
active:
type: boolean
required:
- name
CategoryEnum:
enum:
- 0
- 1
type: integer
description: '* `0` - Physical
* `1` - Virtual'
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
PaginatedCatalogItemReadList:
type: object
properties:
metadata:
type: object
properties:
pagination:
type: object
properties:
count:
type: integer
example: 10
next:
type:
- string
- 'null'
format: uri
example: null
previous:
type:
- string
- 'null'
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'
AccountTypeEnum:
enum:
- 0
- 1
- 2
- 3
- 4
- 5
type: integer
description: '* `0` - Assets
* `1` - Liability
* `2` - Expense
* `3` - Income
* `4` - Equity
* `5` - Other'
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'
CatalogItemReadSerializerSingleUpdate:
type: object
properties:
metadata:
type: object
additionalProperties: {}
default: {}
data:
$ref: '#/components/schemas/CatalogItemRead'
required:
- data
NullEnum:
enum:
- null
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
- 'null'
account_code:
type:
- integer
- 'null'
internalSKU:
type: string
maxLength: 50
description:
type:
- string
- 'null'
product_url:
type:
- string
- 'null'
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
CreditCardStatusEnum:
enum:
- pending
- active
- inactive
- canceled
- lost
- stolen
type: string
description: '* `pending` - Pending
* `active` - Active
* `inactive` - Inactive
* `canceled` - Canceled
* `lost` - Lost
* `stolen` - Stolen'
ShippingMethod:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
maxLength: 100
description:
type:
- string
- 'null'
active:
type: boolean
required:
- name
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'
VendorTypeEnum:
enum:
- 2
- 3
- 4
- 6
- 7
type: integer
description: '* `2` - amazon punchout
* `3` - preferred
* `4` - regular
* `6` - credit card provider
* `7` - checkout'
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'
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
- 'null'
product_url:
type:
- string
- 'null'
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
- 'null'
format: date-time
selected_account:
type: object
additionalProperties: {}
readOnly: true
required:
- account_code
- currency
- name
- pref_vendor
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
- 'null'
required:
- code
- description
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
EmailConfiguration:
type: object
properties:
auto_po:
type: boolean
payment_remittance:
type: boolean
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
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
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