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 Catalog API
version: ''
description: '# Disclaimer
- Procurify’s API is evolving and is subject to change at any time.'
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:
EmailConfiguration:
type: object
properties:
auto_po:
type: boolean
payment_remittance:
type: boolean
PaymentTerm:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
maxLength: 100
description:
type:
- string
- 'null'
active:
type: boolean
required:
- name
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
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
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'
CreditCardStatusEnum:
enum:
- pending
- active
- inactive
- canceled
- lost
- stolen
type: string
description: '* `pending` - Pending
* `active` - Active
* `inactive` - Inactive
* `canceled` - Canceled
* `lost` - Lost
* `stolen` - Stolen'
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
ShippingTerm:
type: object
properties:
id:
type: integer
readOnly: true
name:
type: string
maxLength: 100
description:
type:
- string
- 'null'
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'
AccountTypeEnum:
enum:
- 0
- 1
- 2
- 3
- 4
- 5
type: integer
description: '* `0` - Assets
* `1` - Liability
* `2` - Expense
* `3` - Income
* `4` - Equity
* `5` - Other'
ShippingMethod:
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
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
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'
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
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
CatalogItemReadSerializerSingleUpdate:
type: object
properties:
metadata:
type: object
additionalProperties: {}
default: {}
data:
$ref: '#/components/schemas/CatalogItemRead'
required:
- data
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
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
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
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'
CategoryEnum:
enum:
- 0
- 1
type: integer
description: '* `0` - Physical
* `1` - Virtual'
BlankEnum:
enum:
- ''
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
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'
CatalogItemReadSerializerSingleCreate:
type: object
properties:
metadata:
type: object
additionalProperties: {}
default: {}
data:
$ref: '#/components/schemas/CatalogItemRead'
required:
- data
NullEnum:
enum:
- null
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'
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