Platform Contracts and ConnectWise Agreements

Appxite

Introduction

When invoice lines are synced from the Platform to ConnectWise, each line must be attached to a ConnectWise Agreement. On the Platform side, invoice lines belong to an Invoice Contract. These two concepts — Platform Invoice Contract and ConnectWise Agreement — serve a similar purpose (defining the billing relationship with a customer) but they are not the same thing, they exist in different systems, and they do not have a strict one-to-one relationship.

This article explains what each concept is, how they are linked during the integration, and what Partners need to be aware of when managing both systems.

Terminology note
Throughout the ConnectWise integration, the Platform and ConnectWise use different names for related concepts. For contracts and agreements specifically:

Platform term ConnectWise term
Invoice Contract Agreement
Contract ID Referenced in the PSA Agreement Name field mapping
Organization Company

The ≈ symbol is intentional — they are not exactly equivalent. The differences are explained in this article.

1. What is a Platform Invoice Contract?

In the Platform, a Contract is the agreement that defines the billing relationship between two organizations. There are three contract purposes — Invoice, Resell, and Consume. For the ConnectWise integration, only the Invoice Contract is relevant.

An Invoice Contract is created between a Seller (Provider) and a Customer (Consumer). It defines:

  • Billing Cycle Day — the day of the month (1–28) when invoices are generated for that Customer
  • Currency — the currency used for all invoice lines under this contract
  • Contract Type — for example, Distribution Services, CSP, Azure Plan & OneTime
NOTE! A Seller typically has one Invoice Contract per Customer. All subscriptions for that Customer are invoiced under the same contract — same billing day, same currency. The Contract ID visible in the Platform's Mapping → Invoices tab identifies this contract for each invoice line.
 

  • Organization Name = same customer across multiple rows
  • Contract ID = same value across all rows for that customer
  • Scroll right to show the Contract ID column if it is not immediately visible

The Invoice Contract is created automatically when a Customer is onboarded on the Platform. Partners do not normally need to create or modify Invoice Contracts — the key attributes to be aware of for the integration are the Currency and the Contract ID.

NOTE! Contract Currency cannot be changed via the Platform after creation. If the currency needs to change, contact AppXite Support. This has a direct impact on the ConnectWise integration — see Section 

2. What is a ConnectWise Agreement?

In ConnectWise, an Agreement is the billing container that invoice lines (Additions) are attached to. It defines the billing terms for a specific Company — billing cycle, currency, and invoicing settings. When the Platform syncs invoice lines to ConnectWise, they appear as Additions on the Agreement for the mapped Company.

Key Agreement fields that matter for the integration:

Field Why it matters
Agreement Name Appears in the PSA Agreement Name dropdown on the Platform's Mapping → Invoices tab. Used by the integration to identify the correct Agreement when resolving where to post lines.
Agreement Type Must match the Agreement Type selected in Platform Settings → ConnectWise → Configuration. Used to find or create the Agreement during sync.
Status Must be Active. The integration cannot post Additions to a Cancelled Agreement.
Currency Must match the Platform Invoice Contract currency. ConnectWise does not convert currencies — a mismatch posts values in the wrong currency silently.
Bill Products Must be set to Billable for Additions to appear on invoices.
Billing Start Date Acts as a hard floor for Addition Effective Dates — no Effective Date sent by the Platform can be earlier than this date. See Charge-date rules: how they affect Additions in ConnectWise.

ConnectWise Agreement Details:

Agreement Type detail form - upper section

Agreement Type detail form - Billing Defaults section

3. The key difference: one Agreement per Company

The most important concept to understand about how the integration manages Agreements is the one Agreement per Company rule:

Each ConnectWise Company has exactly one Agreement used for all Platform contracts related to that Company. If a Seller has multiple Platform contracts with the same end Customer, all corresponding invoice lines are posted to the same Agreement in ConnectWise.

This means the relationship between Platform contracts and ConnectWise Agreements is many-to-one:

In practice this means: if a Customer has both a Distribution Services contract and a CSP contract on the Platform, all invoice lines from both contracts land as Additions under the single Agreement for that Company in ConnectWise. Partners do not need to create separate Agreements per contract type.

NOTE! The PSA Agreement Name column on the Platform's Mapping → Invoices tab can be left empty for any line. When empty, the integration automatically finds or creates the correct Agreement for that Company using the Agreement Type configured in Settings

4. How the Contract → Agreement mapping is established

The integration stores a mapping record linking each Platform Contract to a ConnectWise Agreement. This mapping is established automatically during the Load phase (when you click Load Invoices) and resolved again during Sync if the mapping was not set during load. Partners can also assign it manually on the Invoices tab.

The resolution follows this order:

Step 1 Existing mapping for this Contract + Company pair

The integration checks whether a mapping already exists for this exact combination of Platform Contract ID and ConnectWise Company. If it does, that mapping is reused — no CW API call is made.

Result: Line is posted to the previously mapped Agreement.

Step 2 Another contract for this Company is already mapped to an Agreement

No mapping exists for this contract, but the same CW Company already has another contract mapped to an Agreement. The one-Agreement-per-Company rule applies — the new contract mapping is created pointing to that same existing Agreement.

Result: Line is posted to the existing Agreement for this Company. A new Agreement is not created.

Step 3 No mapping exists — search ConnectWise for a matching Agreement

No mapping exists for this contract, and this Company has no previously mapped contracts. The integration queries the ConnectWise API and looks for an Agreement whose name matches the Agreement Type name configured in Platform Settings → ConnectWise → Configuration.

Example: if the configured Agreement Type is "Managed Service", the integration looks for an Agreement named "Managed Service" under that Company in ConnectWise.

If found: A mapping is created and the line is posted to that Agreement.

If not found: Move to Step 4.

This is the Agreement the integration will find and use at Step 3. Its name must exactly match what is configured in Platform Settings → ConnectWise → Configuration → Agreement Type.
 
Step 4 No matching Agreement found — create a new one

No Agreement matching the Agreement Type name was found in ConnectWise for this Company. The integration creates a new Agreement automatically. See Section 5 for the exact fields used.

Result: A new Agreement is created in ConnectWise. The Platform's PSA Agreement Name column on the Invoices tab is updated automatically with the new Agreement's name after sync completes.

The populated value confirms a new Agreement was created and the mapping was saved.

  • The newly created Agreement is visible — its name matches the Agreement Type configured in Platform settings
  • Start Date = first day of the charge start month (not the invoice date — for example, if the charge started on 15 May 2026, Start Date = 01 May 2026)
  • Status = Active
  • If the Company had a pre-existing Agreement (e.g. "Test Agreement"), it is still there alongside the new one
NOTE! If the CW API call in Step 3 fails (for example, due to a permissions error or a temporary connectivity issue), the line is saved without a contract mapping. The PSA Agreement Name column remains empty and the line must be assigned manually on the Invoices tab before it can be synced.

5. What an auto-created Agreement looks like in ConnectWise

When the integration creates a new Agreement in ConnectWise (Step 4 above), it sets the following fields:

Agreement field in ConnectWise Value set by the integration
Name The Agreement Type name configured in Platform Settings (e.g. "Managed Service", "Cloud Services")
Agreement Type The Agreement Type ID from Platform Settings
Company The ConnectWise Company ID from the Organization mapping
Contact The Contact ID from the mapped ConnectWise Company, if available — omitted if none exists
Start Date First day of the month of the invoice line's Charge Start Date (e.g. charge starts 15 May 2026 → Start Date = 01 May 2026)
No End Date True — the Agreement has no expiry date
Billing Cycle Monthly
Bill To Company Same ConnectWise Company as the Agreement owner
Billing Start Date Same as Start Date
Next Invoice Date Same as Start Date
Taxable True
Status Active
Proration Enabled immediately after creation — ConnectWise will automatically pro-rate Addition amounts for partial billing periods
NOTE! The Start Date of the auto-created Agreement is the first day of the charge start month, not the invoice date or the current date. For example, if the invoice line has a Charge Start Date of 15 May 2026, the Agreement's Start Date will be 01 May 2026. This is important because the Agreement's Billing Start Date acts as a floor for Effective Dates on Additions — see Charge-date rules: how they affect Additions in ConnectWise.

Compare Start Date against the Charge Start Date of the invoice line that triggered the creation — Start Date should be the 1st of the same month, not the exact Charge Start Date.

6. Currency: how it flows from Contract to Agreement

Currency is one of the most important alignment points between Platform contracts and ConnectWise Agreements. A mismatch causes invoice lines to be posted in the wrong currency — ConnectWise does not convert currencies automatically and does not warn about mismatches.

Platform Invoice Contract
Currency = EUR (set at creation)
All invoice lines for this Customer inherit EUR
Platform Mapping → Invoices tab
Currency column shows EUR
Visible on each invoice line row
ConnectWise Agreement
Currency must also = EUR
Set in Recurring Invoicing Parameters

Before syncing invoice lines for a Customer, verify that the Currency shown in the Platform's Mapping → Invoices tab matches the Currency set on the ConnectWise Agreement for that Company.

This is the currency that must match the CW Agreement's Currency field. Use this to verify before syncing a new Customer for the first time.

 

7. Changing the Contract → Agreement mapping

Partners can change which ConnectWise Agreement a Platform contract's invoice lines are posted to by editing the PSA Agreement Name on the Invoices tab. This can be done per line using the edit (pencil) icon, or across multiple lines using Bulk Update.

What happens automatically

When the PSA Agreement Name is changed for one invoice line, the new mapping is automatically applied to all other Not Synced and Failed lines that share the same Contract ID and Organization. You do not need to update each line individually — the cascade handles it.

Before the edit:

One line edited:

After the sync:

NOTE! The cascade only affects lines with Status in PSA = Not Synced or Failed. Lines that are already Synced are not affected — they remain on the original Agreement in ConnectWise.

What requires manual action in ConnectWise

When a Contract → Agreement mapping is changed, the integration does not automatically cancel or move the Additions that were previously synced to the old Agreement. Those Additions remain open in ConnectWise and will continue to appear on invoices until manually cancelled.

talog. 

Warning! After changing a PSA Agreement Name for a contract that already has Synced lines, you must manually clean up ConnectWise to avoid double billing. The required steps are:

1. In ConnectWise, navigate to Finance → Agreements → open the old Agreement → Additions tab.

2. For each Addition that was created by the integration for the affected subscriptions, manually set a Cancelled Date to stop them from billing further. The Cancelled Date should be set to the last day of the final billing period you want to include on the old Agreement.


3. Return to the Platform's Mapping → Invoices tab and re-sync the affected invoice lines. They will now be created as new Additions under the new Agreement.

Summary

Platform Invoice Contracts and ConnectWise Agreements serve similar purposes — defining the billing relationship with a customer — but they are different objects in different systems. The key points to remember:

  • The Invoice Contract on the Platform defines the Customer's billing currency and billing cycle day. Its Contract ID appears on the Mapping → Invoices tab and identifies which contract each invoice line belongs to.
  • ConnectWise uses one Agreement per Company for all Platform contracts related to that Company. Multiple Platform contracts for the same Customer all post to the same Agreement.
  • The Contract → Agreement mapping is established automatically during Load and Sync — the integration searches ConnectWise for an Agreement matching the configured Agreement Type name, and creates one if none is found.
  • When a new Agreement is created automatically, its Start Date is the first day of the charge start month, its Billing Cycle is Monthly, and proration is enabled immediately.
  • The Platform Invoice Contract's Currency must match the ConnectWise Agreement's Currency. Mismatches post values in the wrong currency without warning.
  • Changing the PSA Agreement Name for a contract cascades to all Not Synced and Failed lines for that contract automatically, but does not cancel previously synced Additions on the old Agreement — that cleanup must be done manually in ConnectWise.

Related articles

Was this article helpful?

0 out of 0 found this helpful

Add comment

Please sign in to leave a comment.