ConnectWise PSA
Cotillion’s ConnectWise integration is a read-only sync of Opportunities, their forecast line items, Companies, Contacts, and Notes from your ConnectWise PSA instance into a single, standardized deal record. Once synced, the deals appear in your Cotillion workspace where you can register them against vendor portals (AWS Partner Central, Microsoft Partner Center, …) with a single action.
Before you begin — you’ll create a dedicated API Member in your ConnectWise PSA with a read-only Security Role, and generate an API key pair. The whole setup takes about 10 minutes.
At a glance
| Item | Value |
|---|---|
| Authentication | API Member key pair — Company ID + Public Key + Private Key |
| API surface | ConnectWise PSA REST API v3.0 (/v4_6_release/apis/3.0) |
| Direction | Read-only (Cotillion never writes back) |
| Credentials | AWS KMS-encrypted at rest, never logged |
| Region | You pick your ConnectWise cloud region (Australia / Europe / North America) |
Setup
Step 1 — Create an API-only Security Role (recommended)
A dedicated Security Role keeps the API Member scoped to just the data this integration reads.
In ConnectWise PSA:
- Open System → Security Roles and click New to add a role — name it Cotillion Read-only (or similar).
- Each module row has four permission columns — Add / Edit / Delete /
Inquire — each a level dropdown (None … All). Set Add / Edit / Delete =
None everywhere (the integration never writes), and Inquire = All on
only the modules Cotillion reads:
- Companies — Company Maintenance, Contacts (customer and contact lookup).
- Sales — Opportunity and Closed Opportunity (to read open deals plus won/lost, and their forecast line items).
- System — Member Maintenance, plus the System Reports / API permission
that backs the connection check. Cotillion reads the members directory to
resolve opportunity owners and note authors, and calls
system/infoto verify credentials. - Project — Project Headers and Project statuses. Cotillion reads projects and their statuses for the trust-profile delivery stats.
- Service Desk — Service Tickets. Cotillion reads service tickets for the trust-profile SLA / first-response stats.
- Save.
Sources (official ConnectWise docs): Create an API Member & Security Role (ConnectWise Developer Network) · ConnectWise Developer Network — REST API reference (endpoint → module mapping).
Why read-only. Our integration never writes to ConnectWise. Granting any Add / Edit / Delete permission goes beyond what is required.
Step 2 — Create an API Member
- Open System → Members, then switch to the API Members tab.
- Click New to create an API-only Member (it holds no license and has no interactive UI login).
- Set its Role ID to the Cotillion Read-only role from Step 1, and fill the required Location / Business Unit fields.
- Save.
Step 3 — Generate the API key pair
- Open the API Member you just created and go to its API Keys tab.
- Click New, give the key a description (e.g.
Cotillion), and save. - Copy the Public Key and the Private Key.
Keep these values handy — the Private Key is shown only once by ConnectWise. If you lose it, you’ll need to generate a new key pair.
Step 4 — Find your Company ID
Your Company ID is the short company code you type on the ConnectWise PSA login screen (not your email). If you’re unsure, it also appears in your instance URL.
Also note your region — it’s the prefix of your ConnectWise login URL
(na. / au. / eu.myconnectwise.net). You’ll pick it from a dropdown in the
next step. (Cotillion can’t detect it for you: ConnectWise’s company lookup only
answers on the matching regional host, so the region has to come from you.)
Self-hosted / on-premise ConnectWise? The region dropdown covers the ConnectWise cloud
(myconnectwise.net). If you run ConnectWise on your own server (your own domain), contact
us — we’ll add your host directly.
Step 5 — Connect in Cotillion
- Sign in to your Cotillion workspace at cotillion.indyrct.com .
- Open CRM / PSA in the sidebar → Connect → ConnectWise PSA.
- Enter your Company ID, Public Key, and Private Key from the steps above, and choose your ConnectWise region (Australia / Europe / North America) from the dropdown.
- Click Test & Connect.
What happens automatically:
- ✅ Cotillion builds your API host from the region you chose.
- ✅ Verifies the credentials against the ConnectWise PSA REST API.
- ✅ Encrypts them with an AWS KMS envelope before storing.
- ✅ Starts a one-time backfill sync, then schedules recurring updates.
Step 6 — Optional — Exclude individual opportunities from the sync
Some opportunities should never appear in Cotillion — internal-only forecasts, experiments, or deals you don’t want surfaced for vendor registration. You can opt them out with a custom field on the Opportunity.
In ConnectWise PSA:
- Open System → Setup Tables → Custom Fields, choose the Opportunity screen, and click New.
- Set Field Type = Checkbox and Caption =
Cotillion Exclude From Sync, then save. - Tick it on any opportunity you want hidden.
On the next sync (within ~5 minutes), Cotillion skips the AI mapping for that opportunity entirely.
Do not rename this caption later. Cotillion matches the field by its exact caption, so a rename stops the exclusion — the opportunity would start syncing again on the next pass.
Reversible. Un-tick the field to re-include the opportunity on the next sync. Cotillion does not delete previously-synced deal data when you flip the flag on — it stops refreshing it, and flipping it off brings the data back up to date.
How the sync works
| Cadence | What |
|---|---|
| Members directory refresh | Roughly once a day: Cotillion refreshes the ConnectWise members directory it uses to resolve opportunity owners and note authors. This is the only data pulled on a fixed cadence. |
| Opportunity sync | Every 5 minutes per organization: opportunities + their forecast line items + companies + contacts + notes. Opportunity statuses, stages, and types are resolved inline on every sync straight from ConnectWise (status flags + reference labels) — there is no separate 24-hour refresh for them, so a rename is reflected on the next sync. |
The integration respects ConnectWise’s per-instance rate limits — each sync is rate-limited per credential, with backoff on throttling, and outbound traffic is logged in our operational dashboards for audit.
Which opportunities Cotillion keeps
Cotillion keeps the opportunities you could register with a vendor, and the ones it is already tracking. In practice:
- Open opportunities are synced and appear in Deals.
- An opportunity that closes while Cotillion is tracking it stays — that is exactly when the outcome has to reach the vendor, when the vendor’s verdict comes back, and when a won deal becomes eligible for an incentive. It moves out of the “requires action” view and stays under the registered deals.
- Opportunities that were already closed before Cotillion saw them are not kept. Editing an old closed opportunity in ConnectWise does not pull it in either. Your closed deal history stays in ConnectWise.
What gets synced and how it stays stable
Each sync produces a structured, standardized view of every opportunity. Because ConnectWise keeps deal value on the opportunity’s forecast (not on the opportunity header), Cotillion reads the forecast line items and rolls them up into a single standardized amount, currency, and per-line-item detail. Won / lost / open status is read from ConnectWise’s status flags, not the editable status name, so it stays correct even if you rename your statuses.
Two guarantees Cotillion holds across syncs:
- Customer and contact identity are stable. When you rename a company in ConnectWise, Cotillion picks up the new name on the next sync, but the same customer keeps the same internal identity — every opportunity that pointed to it before still points to it after. The same applies to contacts.
- Disconnect-then-reconnect is non-destructive. If you remove the ConnectWise integration in Cotillion and add it back later, your existing opportunities re-attach to the new connection without losing their vendor-registration history or per-line-item state.
Audit trail
Cotillion keeps an immutable record of every payload submitted to a vendor. The record captures exactly what was sent at submission time, independent of subsequent edits in ConnectWise or Cotillion.
Reference
ConnectWise’s official help if your UI differs from the steps above:
Troubleshooting
Authentication fails on Test & Connect
First, check the region you picked matches your ConnectWise login URL (the
na. / au. / eu. prefix). Correct keys against the wrong region fail auth
and read like bad keys — leave the keys alone and re-pick the region.
If the region is right, the Company ID, Public Key, or Private Key was mistyped, or the API Member’s Security Role is missing read access. Regenerate the key pair in ConnectWise (the Private Key cannot be retrieved later) and re-check the role from Step 1.
Deal amounts are missing
ConnectWise keeps deal value on the opportunity forecast. If amounts are blank, confirm the API Member’s role can read the opportunity’s forecast / products, and that the opportunity actually has forecast line items.
Rate limit reached
ConnectWise returned a 429 (rate-limited) response. Cotillion automatically backs off and retries; no action required.
An opportunity is missing from Cotillion
Check the opportunity’s Cotillion Exclude From Sync custom field — if it’s ticked, the opportunity is intentionally hidden (see Step 6). Un-tick it to bring it back on the next sync (within ~5 minutes).
For Cotillion-side issues, email [email protected].