Spend Management · Beta
Procurify
API integration
Ship Spend Management features without building the integration. Full Procurify API access via Proxy and 50+ MCP-ready tools for AI agents — extend models and mappings to fit your product.
Built for specific customer use cases. Issues are resolved quickly.
Talk to usUse Cases
Why integrate with Procurify
Common scenarios for SaaS companies building Procurify integrations for their customers.
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
Ship these features with Truto + Procurify
Concrete product features your team can ship faster by leveraging Truto’s Procurify integration instead of building from scratch.
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.
SuperAI
Procurify AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
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.
Why Truto
Why use Truto’s MCP server for Procurify
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 850+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
How It Works
From zero to integrated
Go live with Procurify in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Procurify account
Use Truto’s frontend SDK to connect your customer’s Procurify account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Procurify
Truto’s Proxy API is a 1-to-1 mapping of the Procurify API. You call us, we call Procurify, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Procurify’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Procurify on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
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.
From the Blog
Procurify integration guides
Deep dives, architecture guides, and practical tutorials for building Procurify integrations.
Procurify
Get Procurify integrated into your app
Our team understands what it takes to make a Procurify integration successful. A short, crisp 30 minute call with folks who understand the problem.