Skip to content

§00Integrations / ERP

All integrations

Priority ERP integration: Connect Priority ERP to everything. Through its forms, never around them.

Priority keeps its business logic in forms, triggers and BPM rules, so a good integration has to behave like a careful user. PartnerMCP connects through Priority's REST API (OData v4) — or its MCP server on Priority Cloud 26.0 and later — discovers each tenant's forms and custom columns, and builds flows that let Priority number, price and tax every document. Priority Cloud or on-prem.

How PartnerMCP connects

01Primary path

REST API (OData v4)

The primary path, on Priority Cloud and on-prem. Priority's REST API wraps its forms, so every write runs the triggers and checks a user would: an order and its lines arrive as one deep insert on ORDERS with ORDERITEMS_SUBFORM. Reads are paged with $top and $skip, and changes are picked up with $since. Each integration signs in as its own API user with a personal access token that can be revoked on its own.

Product
Priority ERP
Vendor
Priority Software
Category
ERP
Runs
Cloud · On-prem
Connects through
REST (OData v4)
Detects changes with
$since polling · BPM webhooks
On this page
  1. 01What you can build
  2. 02Objects and events
  3. 03What it handles
  4. 04Pairings
  5. 05Priority to anything
  6. 06Questions
  7. 07References
§01—What you can build

What you can build.

Each one starts as a sentence. PartnerMCP answers with a plan in Priority’s own objects, then builds it against your systems.

01Salesforce Closed Won → Priority sales order

“When an Opportunity is Closed Won in Salesforce, create or update the customer in Priority, create the sales order with its products and prices, and send delivery and invoice status back to Salesforce.”

Build this integration

PartnerMCP will

  1. Start on IsWon = true from Salesforce Change Data Capture.
  2. Find the customer by the Priority customer number stored on the Account; when there isn't one, propose a match by name or VAT number for review.
  3. Create or update CUSTOMERS — Account.Name goes to CUSTDES — and write the assigned CUSTNAME back to the Account.
  4. Check the Opportunity's ID against earlier orders, then POST ORDERS with ORDERITEMS_SUBFORM lines built from the OpportunityLineItems.
  5. Let Priority price and tax the order; reconcile DISPRICE with Opportunity.Amount and flag any difference.
  6. Follow DOCUMENTS_D with $since and AINVOICES with filtered reads by order or customer — $since where your tenant's invoice forms support it — and report the permanent IVNUM once the invoice is finalized.

02Shopify orders → Priority, stock and shipments back

“Create a Priority sales order for every paid Shopify order, keep Shopify stock in step with Priority, and send shipments back as fulfillments.”

Build this integration

PartnerMCP will

  1. Receive orders/paid webhooks, verify X-Shopify-Hmac-SHA256 and drop duplicates by X-Shopify-Webhook-Id.
  2. Map each variant SKU to a LOGPART PARTNAME; hold unknown SKUs for review instead of creating parts.
  3. Create ORDERS with ORDERITEMS_SUBFORM in one deep insert, storing the Shopify order ID in a prefixed custom column.
  4. When the DOCUMENTS_D shipment exists, create the Shopify fulfillment with its tracking number.
  5. Push Priority stock to Shopify InventoryLevel with inventoryAdjustQuantities and an idempotency key.
  6. Prepare refunds/create as a credit memo and hold it for finance review.

03Stripe payments → Priority receipts

“Match Stripe payments to open Priority invoices, record the receipts, and flag anything that doesn't add up.”

Build this integration

PartnerMCP will

  1. Verify Stripe-Signature on payment_intent.succeeded and invoice.paid events; drop duplicates by event ID.
  2. Find the open Priority invoice by the reference stored when it was billed — the final IVNUM and CUSTNAME — never by amount alone.
  3. Post the customer receipt in Priority and apply it to that invoice.
  4. Tie Stripe fees and net amounts to each payout through BalanceTransaction.
  5. Send partial, over- and unmatched payments to a review queue.

04HubSpot won deals → Priority orders

“When a HubSpot deal reaches Closed Won, create the customer and sales order in Priority and show invoice status on the deal.”

Build this integration

PartnerMCP will

  1. Subscribe to deal.propertyChange on dealstage and act only on the pipeline's won stage.
  2. Read the deal's line_items (with hs_product_id) and its associated company.
  3. Create or update CUSTOMERS and keep CUSTNAME in a unique company property for later matches.
  4. Create ORDERS with ORDERITEMS_SUBFORM and write ORDNAME back to the deal.
  5. Update the deal when the AINVOICES invoice is finalized.

05Released Priority orders → the warehouse

“Send released Priority orders to our warehouse system and confirm shipments back in Priority.”

Build this integration

PartnerMCP will

  1. Read the tenant's Possible Statuses for Orders first — status names are tenant-defined — then follow ORDERS with $since for the status that means released.
  2. Send each line's PARTNAME, TQUANT and TUNITNAME, with the ship-to address, to the warehouse system.
  3. Create the customer shipment in DOCUMENTS_D through the form when the warehouse confirms.
  4. Retry only 429 and 5xx responses; hold validation errors with Priority's own message.
§02—Objects and events

Objects and events, by their API names.

The records PartnerMCP reads and writes in Priority, and the events that start a run.

  • Customers

    CUSTOMERS

    Key CUSTNAME is the customer number (up to 16 characters, assignable and renamable); the name is CUSTDES. The internal ID CUST comes back read-only. HOSTNAME holds the website, with EMAIL and PHONE alongside.

  • Sales orders

    ORDERS

    ORDNAME is assigned by Priority (e.g. SO16000007) and ORDSTATUSDES starts as Draft. DISPRICE (before tax), VAT and TOTPRICE (final, incl. tax) are computed by Priority. CPROFNUM links the source quote.

  • Order lines

    ORDERITEMS_SUBFORM

    PARTNAME, TQUANT, TUNITNAME, PRICE, PERCENT and DUEDATE, keyed by line number KLINE. Without a PRICE, Priority prices the line from the customer's price list. A saved line's part can't change — the line is deleted and re-inserted.

  • Parts

    LOGPART

    Part catalogue keyed by PARTNAME, with PARTDES, BARCODE and FAMILYNAME. EXTPART is an internal ID, not an external reference.

  • Price quotations

    CPROF

    Quote number CPROFNUM. The OPENORDBYCPROF procedure opens a sales order from a quote.

  • Customer shipments

    DOCUMENTS_D

    DOCNO (e.g. SH17000001) with the source ORDNAME, CUSTNAME and status STATDES — the document a fulfillment sync follows.

  • Sales invoices

    AINVOICES

    Composite key IVNUM, IVTYPE='A', DEBIT='D'. IVNUM is a temporary T… number until the invoice is finalized. A sales invoice also deducts the delivered goods from inventory.

  • Purchasing

    PORDERSDOCUMENTS_P

    Purchase orders and goods receiving vouchers, for procure-to-pay flows.

  • Warehouses

    WAREHOUSES

    A lookup form without BPM: its changes are read through the UDATE column (25.0 with the latest updates; included in 26.1).

  • Attachments and text

    EXTFILES_SUBFORMORDERSTEXT_SUBFORM

    Attachments as data URIs (21.0+). Text subforms carry HTML, with direction tags for Hebrew.

Events

  • $since change tracking

    GET ORDERS?$since=<UTC time> returns documents changed since that moment (20.0+), and $expand brings their lines in the same call. It works on forms with BPM — orders, shipments and other documents — needs no extra module, and is PartnerMCP's default cursor.

  • UDATE on lookup forms

    Forms without BPM, such as WAREHOUSES, ACCOUNTS and SUPPLIERPARTS, carry UDATE and USERLOGIN columns from 25.0 (latest update bundle) and 26.1, read with $filter=UDATE ge ….

  • BPM and business-rule webhooks

    Near-real-time pushes from the Webhooks module, with headers such as priority-form-name and priority-bpm-subject. Version 26.0 adds a Webhook - Error Log kept for 7 days. PartnerMCP reconciles each push against $since.

  • Scheduled exports

    Dynamic-interface JSON exports run by the Tabula Task Scheduler and uploaded over SFTP — for batch integrations that don't need minutes.

  • Not an event source: the MCP server

    Priority's MCP server answers requests but offers no subscription, so it never starts a run.

§03—What it handles

What PartnerMCP handles for you.

The details that break Priority integrations in production, and what PartnerMCP does about each one.

  1. 01

    Priority Cloud fair-use throttling

    Priority Cloud allows 100 calls a minute per API user and at most 15 requests in flight (10 processing, 5 queued); requests running over 3 minutes are dropped, and throttled calls get HTTP 429. PartnerMCP paces each API user with a token bucket, keeps concurrency at 10 or below and backs off on 429.

  2. 02

    CUSTNAME vs CUSTDES

    A name matcher maps Account.Name to CUSTNAME — but CUSTNAME is the customer number, the key, at most 16 characters. The name is CUSTDES. PartnerMCP maps names to CUSTDES, keeps CUSTNAME and the internal CUST in its link table, and never forces an 18-character Salesforce ID into a 16-character key.

  3. 03

    TOTPRICE is computed — including VAT

    ORDERS.TOTPRICE is the final price after line pricing, the header discount (PERCENT) and tax (VAT); writing it makes Priority back-calculate the discount and sales tax. PartnerMCP never writes it: it sends the lines, lets Priority price them, and reconciles DISPRICE, the total before tax, with the CRM's amount.

  4. 04

    Israel e-invoice allocation numbers

    B2B tax invoices above the Israel Tax Authority's threshold must carry an allocation number, and Priority supports requesting it natively. PartnerMCP checks the customer's VAT number before the order is submitted, so a missing one is caught at the order — not when the invoice is due.

  5. 05

    Priority assigns the document numbers

    ORDNAME and IVNUM come from Priority, so an order can't be upserted by a natural key, and 409 Conflict only fires when a POST repeats an existing key. PartnerMCP stores the source record's ID — in its link table and, if you want, a prefixed custom column — and checks it before every create.

  6. 06

    $batch has no rollback

    A $batch holds at most 100 operations and Priority states it doesn't roll back; a deep insert can save an order while one of its lines fails. PartnerMCP uses dependsOn to pin which line failed and resumes from that line instead of creating the order twice.

  7. 07

    Silent result caps

    MAXAPILINES (default 2,000 from 25.1) truncates responses without a warning, and the MCP server's form_fetch stops at 100 records when no top is given. PartnerMCP pages every read with $top, $skip and a stable $orderby.

  8. 08

    Invoice numbers change at finalization

    An AINVOICES document keeps a temporary T… number until it's finalized — a form Action that REST can't run. PartnerMCP reports an invoice to the CRM only once its permanent IVNUM exists, and uses the Web SDK when you want it to finalize.

  9. 09

    Forms, never tables

    Priority warns that inserting into its tables directly bypasses integrity checks and form triggers. PartnerMCP writes only through forms — REST, form loads or the Web SDK — and runs form loads with -enforcebpm so BPM rules aren't skipped.

  10. 10

    Customizations and metadata

    Tenant columns carry a four-letter prefix and appear in the API only after POST ClearEntityMetadata. PartnerMCP refreshes the metadata during discovery, reads GetMetadataFor (25.0+) for every form it maps, and never assumes another installation's field names.

  11. 11

    Row-level privileges don't apply to REST

    Priority's REST requests aren't subject to the data privileges users see in the UI; field-level permissions are enforced since 22.1. PartnerMCP gives each integration a least-privilege API user and limits every flow to the forms and companies it needs.

  12. 12

    Hebrew, time zones and metered writes

    Hebrew companies return Hebrew text, dates carry the company's time-zone offset, and API writes count against monthly transaction packages — an order with five lines counts as six. PartnerMCP keeps $since cursors in UTC and skips writes that wouldn't change anything.

§04—Pairings

Pairings, step by step.

Each pair page has the plan, the field mapping and the edge cases for that combination.

§05—Priority to anything

Connect Priority to anything.

Warehouse systems, custom databases, internal software — or any system in the directory. Pick one, and PartnerMCP sketches the plan it would build.

Priority
Priority → WMS
Sandbox
Order releasedSchema mappingCreate pick requestMonitor warehouseConfirm shipmentUpdate stock
Plan: Priority ERP to Warehouse management (WMS). Priority ERP to Warehouse management (WMS).
  1. Order released — Priority ERP: Trigger · $since polling
  2. Schema mapping — PartnerMCP: lines · bins · carriers
  3. Create pick request — WMS: pick · pack · ship
  4. Monitor warehouse — PartnerMCP: picked · packed · shipped
  5. Confirm shipment — Priority ERP: DOCUMENTS_D
  6. Update stock — Priority ERP: Inventory
Product preview · sample data

PartnerMCP will

  1. Send released orders from Priority to the warehouse.
  2. Translate lines, units and carriers.
  3. Track picking, packing and shipping.
  4. Confirm shipments and stock back in Priority.
  5. Retry temporary failures automatically.
§06—Questions

Priority integration questions.

Does PartnerMCP use Priority's MCP server or the REST API?

Both, for different jobs. On Priority Cloud 26.0 and later, PartnerMCP can work with Priority's own MCP server for discovery and on-demand questions. Production flows run on the REST API (OData v4), because the MCP server can't run form Actions, doesn't take attachments yet and has no event subscription.

Can PartnerMCP connect to Priority on-prem?

Yes. The REST API is part of the on-prem application server. PartnerMCP can reach it through a reverse proxy or VPN you already run, or through the Edge Agent, an outbound-only connector inside your network (an architecture concept), so /odata needs no public endpoint. Priority's MCP server is cloud-only, so on-prem flows use REST and the Web SDK.

Which Priority licences does an integration need?

The API module, an API licence for the integration user and transaction packages for writes. Webhooks need the Webhooks module, ODBC the ODBC module, and OAuth2 on-prem the External ID module. PartnerMCP tells you which of these a flow relies on before you build it.

Will PartnerMCP write directly to Priority's database?

No. Priority's own rule is that records enter tables through forms, so triggers and checks run. PartnerMCP writes through REST, form loads or the Web SDK; the ODBC driver is read-only and is used only for reads.

How does it avoid duplicate customers and orders?

Customers are matched on the Priority customer number stored in the source system, and name or VAT-number matches go to review. Because Priority assigns ORDNAME, every create is checked against the source record's stored ID first, and only 429 and 5xx responses are retried.

Our Priority is heavily customized. Is that a problem?

It's the normal case. PartnerMCP refreshes the API metadata, discovers each tenant's forms and prefixed custom columns, and confirms names with GetMetadataFor before it maps a field. Field names from another installation are never assumed.

§07—References

Vendor documentation.

The public documentation behind the technical details on this page.

Product names and logos are trademarks of their respective owners. Their use indicates compatibility only and does not imply endorsement or partnership.

§08Next step

Connect Priority to the rest of your systems.

Describe what should happen. PartnerMCP shows you the plan before anything is built.