---
title: Procurify API Integration on Truto
slug: procurify
category: Spend Management
canonical: "https://truto.one/integrations/detail/procurify/"
---

# Procurify API Integration on Truto



**Category:** Spend Management  
**Status:** Beta

## MCP-ready AI tools

Truto exposes 53 tools for Procurify that AI agents can call directly.

- **list_all_procurify_users** — List users, filterable by active state, location, role, permission, and pending invite. Returns: id, firstName, lastName, user, email, department, location, profile_image.
- **create_a_procurify_user** — Invite one or more new users; the body is an array of users, and each user needs an email. Returns: id, firstName, lastName, user, email, department, location, profile_image.
- **update_a_procurify_user_by_id** — Update a user by id (full update, PUT). Returns: id, firstName, lastName, user, email, department, location, profile_image. Required: id, email, firstName, lastName, location, department.
- **delete_a_procurify_user_by_id** — Deactivate a user by id; Procurify deactivates the user and does not delete it. Returns an empty 204 response on success. Required: id.
- **list_all_procurify_current_user** — Get the user account the access token belongs to. Returns: id, uuid, domains, headquarter_logo, systemaccess_cache, approval_delegatee, is_approval_delegatee, department.
- **list_all_procurify_permissions** — List the user permissions that can be granted. Returns: id, codename, tier.
- **list_all_procurify_permission_groups** — List the system roles (permission groups). Returns: id, name, user_count, permissions, type, tier.
- **list_all_procurify_locations** — List locations. Returns: id, name, url, logo, currency, phoneOne, fax, email.
- **create_a_procurify_location** — Create a location; only users with superuser permission can create locations. Returns: id, name, url, logo, currency, phoneOne, fax, email. Required: name, currency, phoneOne, primary_billing_address, primary_shipping_address, shipping_addresses.
- **get_single_procurify_location_by_id** — Get a location by id. Returns: id, name, url, logo, currency, phoneOne, fax, email. Required: id.
- **update_a_procurify_location_by_id** — Replace a location by id (PUT): omitted fields and alternate shipping addresses are overwritten or deactivated, so send the full record. Returns: id, name, url, logo, currency, phoneOne, fax, email. Required: id, name, currency, phoneOne, primary_billing_address, primary_shipping_address, shipping_addresses.
- **list_all_procurify_departments** — List departments. Returns: id, name, branch, external_id, active, punchout_email, is_active_for_account_code, legal_entity.
- **create_a_procurify_department** — Create a department. Returns: id, name, branch, external_id, active, punchout_email, is_active_for_account_code. Required: branch, name.
- **update_a_procurify_department_by_id** — Update a department by id (full update, PUT). Returns: id, name, branch, external_id, active, punchout_email, is_active_for_account_code. Required: id, branch, name.
- **list_all_procurify_account_codes** — List account codes (types: 0 assets, 1 liability, 2 expense, 3 income, 4 equity, 5 other). Returns: id, applied_accounts_count, code, code_length, description, account_type, active, parent.
- **create_a_procurify_account_code** — Create an account code (types: 0 assets, 1 liability, 2 expense, 3 income, 4 equity, 5 other). Returns: id, applied_accounts_count, code, code_length, description, account_type, active, parent. Required: code, description.
- **update_a_procurify_account_code_by_id** — Update an account code by id (full update, PUT). Returns: id, applied_accounts_count, code, code_length, description, account_type, active, parent. Required: id, code, description.
- **list_all_procurify_accounts** — List chart-of-accounts accounts. Returns: id, account_code, department, start_datetime, end_datetime, budget, budget_used_approved, budget_used_purchased.
- **list_all_procurify_vendors** — List vendors, filterable by vendor group, type, and legal entity availability. Returns: id, name, active, addressLineOne, addressLineTwo, postalCode, city, state_province.
- **create_a_procurify_vendor** — Create a vendor (types: 1 other, 2 hidden, 3 preferred, 4 regular, 5 employee, 6 credit card provider). Returns: id, name, active, addressLineOne, addressLineTwo, postalCode, city, state_province. Required: name, email, type, overall_score.
- **get_single_procurify_vendor_by_id** — Get a vendor by id. Returns: id, name, active, addressLineOne, addressLineTwo, postalCode, city, state_province. Required: id.
- **update_a_procurify_vendor_by_id** — Update a vendor by id (full update, PUT). Returns: id, name, active, addressLineOne, addressLineTwo, postalCode, city, state_province. Required: id, name, type.
- **procurify_vendors_partial_update** — Partially update a vendor by id (PATCH): only the fields you send change. Returns: id, name, active, addressLineOne, addressLineTwo, postalCode, city, state_province. Required: id.
- **list_all_procurify_currencies** — List active and inactive currencies. Returns: id, name, description, rate, base, active.
- **list_all_procurify_catalog_bundles** — List catalog bundles. Returns: id, name, description, image, active, items, items_count.
- **list_all_procurify_catalog_items** — List catalog items. Returns: id, name, image, unitType, pref_vendor, account_code, internalSKU, description.
- **create_a_procurify_catalog_item** — Create a catalog item. Returns: id, name, image, unitType, pref_vendor, account_code, internalSKU, description. Required: name, currency, custom_fields.
- **update_a_procurify_catalog_item_by_id** — Update a catalog item by id (full update, PUT). Returns: id, name, image, unitType, pref_vendor, account_code, internalSKU, description. Required: id, name, currency, custom_fields.
- **create_a_procurify_requisition** — Create a requisition (a purchase request with its line items). Returns: uuid. Required: required_date, location_name, department_name, line_items.
- **list_all_procurify_global_orders** — List orders across the organization (statuses: 0 pending, 1 approved, 2 rejected, 3 purchased, 4 cancelled, 5 received, 6 draft). Returns: uuid, status, num, order_number, branch, user, department, currency.
- **list_all_procurify_global_order_items** — List order items across the organization, with order, purchase order, and receiving filters. Returns: id, name, status, PO, PO_line_num, account, accountCode, active.
- **list_all_procurify_order_items** — List order items, with order, purchase order, and receiving filters. Returns: id, name, status, PO, PO_line_num, account, accountCode, active.
- **list_all_procurify_purchase_orders** — List purchase orders for a role (purchased or receivable) and a status. Returns: uuid, number, purchaser, procurify_PO, PO_Num, date, buyer_name, buyer_contact. Required: role, status.
- **get_single_procurify_purchase_order_by_id** — Get a purchase order by id, with its items (states: 0 purchased, 1 cancelled, 3 closed, 4 paid, 5 reopened). Returns: uuid, number, purchaser, procurify_PO, PO_Num, date, buyer_name, buyer_contact. Required: id.
- **update_a_procurify_purchase_order_by_id** — Update a purchase order by its Procurify PO number (full update, PUT). Required: id, order_items, buyer_name, buyer_contact, buyer_addressLineOne, buyer_postalCode, buyer_city, buyer_country, buyer_address, receiver_name, receiver_contact, receiver_addressLineOne, receiver_postalCode, receiver_city, receiver_country, receiver_address, promise_date, discount, tax, version.
- **procurify_purchase_orders_close** — Close a purchase order by its Procurify PO number. Returns: id, uuid, number, PO_Num, date, discount, freight, fulfilment_status. Required: id.
- **create_a_procurify_purchase_order_reopening** — Reopen a closed purchase order by its Procurify PO number. Returns no response body on success. Required: purchase_order_id.
- **list_all_procurify_purchase_order_billing_history** — View the billing history of purchase orders. Returns: id, number, has_unbilled_unreceived_items, items.
- **list_all_procurify_receipt_items** — List receipt items (individual receiving actions) for an order item. Returns: id, pass_quantity, fail_quantity, order_item, created_at, is_edited, created_by, total_quantity.
- **create_a_procurify_receipt_item** — Receive order items within a single purchase order (creates receipt items). Returns: id, pass_quantity, fail_quantity, order_item, created_at, is_edited, created_by, total_quantity. Required: order_item, pass_quantity, fail_quantity.
- **list_all_procurify_custom_fields** — List order item custom fields; the ids here are the canonical custom field ids, including on bill line items. Returns: id, name, content_type, default_value, is_required, field_choices, field_type, field_label.
- **update_a_procurify_custom_field_by_id** — Update the dropdown choices of an order item custom field by id. Returns: id, name, content_type, default_value, is_required, field_choices, field_type, field_label. Required: id, name, field_type.
- **list_all_procurify_bills** — List accounts payable bills, filterable by status, dates, vendor, and export state. Returns: id, uuid, status, version, locked, currency, items, vendor.
- **get_single_procurify_bill_by_id** — Get an accounts payable bill by its UUID. Returns: id, uuid, status, user, vendor, approval_chain, approver, items. Required: id.
- **create_a_procurify_bill_paid_marking** — Mark approved bills that have no payment as paid, with a payment date. Returns: bill_uuids, bill_group_ids, payment_date. Required: bill_uuids, payment_date.
- **list_all_procurify_ap_items** — List accounts payable items, billed or unbilled. Returns: id, orderitem, expense, bill, vendor, sku, description, po.
- **list_all_procurify_company_payment_methods** — List company payment methods (types: 0 other, 1 check, 2 ACH, 3 EFT, 4 wire). Returns: id, name, type, data, currency, gl_code.
- **create_a_procurify_company_payment_method** — Create a company payment method; the data field depends on the type. Returns: id, name, type, data, currency, gl_code. Required: data.
- **list_all_procurify_vendor_payment_methods** — List vendor payment methods (types: 0 other, 1 check, 2 ACH, 3 EFT, 4 wire). Returns: id, name, vendor, type, data, currency, payment_rail, bank_account_country_code.
- **create_a_procurify_vendor_payment_method** — Create a vendor payment method; the data field depends on the type. Returns: id, name, vendor, type, data, currency, payment_rail, bank_account_country_code. Required: vendor, data.
- **list_all_procurify_payment_approver_choices** — List the users who can approve a payment. Returns: id, user, amount_limit, item_variance_amount_limit, item_variance_percentage_limit, approval_level, bill_amount_limit. Required: payment_id.
- **list_all_procurify_payments** — List payments, filterable by date, currency, status, vendor, and invoice number. Returns: id, uuid, status, payment_source_name, payment_source_type, external_payment_source_id, creator, created_at.
- **list_all_procurify_pay_transactions** — List closed card transactions (fully captured, not only authorizations) across all issued cards. Returns: id, status, note, vendor, currency, amount, vendor_currency, vendor_amount.

## How it works

1. **Link your customer's Procurify account.** Use Truto's frontend SDK; we handle every OAuth and API key flow so you don't need to create the OAuth app.
2. **Authentication is automatic.** Truto refreshes tokens, stores credentials securely, and injects them into every API request.
3. **Call Truto's API to reach Procurify.** The Proxy API is a 1-to-1 mapping of the Procurify API.
4. **Get a unified response format.** Every response uses a single shape, with cursor-based pagination and data in the `result` field.

## Use cases

- **Automate SaaS procurement intake** — SaaS management and ITAM platforms can push new software requests and renewals into Procurify as requisitions, letting their users route purchases through existing approval chains without leaving the procurement system of record.
- **Sync HRIS user provisioning with Procurify** — HRIS and identity platforms can automatically create, update, and deactivate Procurify users as employees join, move departments, or leave — keeping approval hierarchies and budget centers aligned with the source of truth.
- **Close the loop on AP payments** — B2B payment platforms can pull approved bills out of Procurify, execute payments, and mark bills as paid — eliminating manual reconciliation between the payment rail and the AP ledger.
- **Keep vendor catalogs live inside Procurify** — Vertical marketplaces and preferred-supplier platforms can continuously push catalog items and vendor records into Procurify so end users shop from an up-to-date, approved catalog.
- **Surface committed spend in finance dashboards** — FP&A and analytics tools can read purchase orders, bills, and payments from Procurify to show committed vs. actual spend by department, location, or account code in real time.

## What you can build

- **New-hire requisition automation** — Trigger a Procurify requisition for a standard equipment or software bundle the moment a new employee is created in your HR or onboarding product.
- **Two-way vendor and catalog sync** — Push vendors and catalog items into Procurify and pull updates back so your marketplace or SaaS catalog stays consistent with the customer's procurement system.
- **PO status tracking** — Fetch purchase orders and their line items to show fulfillment, closure, and billing status directly inside your application.
- **AP payment write-back** — List outstanding bills and AP items, process payments in your fintech product, then mark bills as paid in Procurify to close the AP workflow automatically.
- **Receipt and 3-way match automation** — Create receipt items against purchase orders when goods or services are delivered, enabling your users to complete 3-way matching without manual data entry.
- **Chart-of-accounts and org structure mirroring** — Keep departments, locations, and account codes in sync between Procurify and your ERP, HRIS, or budgeting tool so every requisition carries the right coding.

## FAQs

### How does authentication to Procurify work through Truto?

Truto handles the Procurify auth handshake and token storage for you. Your end users connect their Procurify account through Truto's connect flow, and your application calls Procurify tools using a Truto-managed connection — no credentials ever touch your backend.

### Which Procurify objects can I read and write?

You can read and write users, departments, locations, account codes, vendors, catalog items, requisitions, purchase orders, receipt items, bills, AP items, payment methods, and payments. Writes include creating requisitions, vendors, catalog items, receipt items, and marking bills as paid, among others.

### Can I create a purchase requisition programmatically?

Yes. The create_a_procurify_requisition tool lets you submit a full requisition — including line items, department, and location — which then enters Procurify's native approval routing.

### How do I handle Procurify custom fields?

Procurify custom fields are exposed via list_all_procurify_custom_fields and update_a_procurify_custom_field_by_id, so you can discover a customer's field schema at runtime and map your product's data into their configuration.

### Does Truto handle pagination and rate limits for Procurify?

Yes. Truto normalizes pagination across list endpoints and transparently manages Procurify's rate limits with retries and backoff, so you can iterate large datasets like bills, POs, or users without writing that plumbing yourself.

### Can I mark bills as paid after processing payment externally?

Yes. Use create_a_procurify_bill_paid_marking to write a paid status back to a Procurify bill after your platform settles the payment, closing the AP loop without manual intervention.

## Related reading

- [Connect Procurify to ChatGPT: Manage Requisitions and Bills](https://truto.one/blog/connect-procurify-to-chatgpt-manage-requisitions-and-bills/) — Learn how to connect Procurify to ChatGPT using Truto's managed MCP server. Automate purchase requisitions, bills, and vendor workflows with AI.
- [Connect Procurify to Claude: Sync Purchase Orders and Catalogs](https://truto.one/blog/connect-procurify-to-claude-sync-purchase-orders-and-catalogs/) — Learn how to connect Procurify to Claude using a managed MCP server. Automate purchase orders, requisitions, and AP billing workflows with AI.
- [Connect Procurify to AI Agents: Automate Spend and AP Workflows](https://truto.one/blog/connect-procurify-to-ai-agents-automate-spend-and-ap-workflows/) — Learn how to connect Procurify to AI agents using Truto's /tools endpoint. Bind native procurement tools to LangChain or Vercel AI SDK to automate AP workflows.
